Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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 覆盖二进制文件中的单个字节会使objdump无法识别它吗?_Python_Linux_Python 3.x - Fatal编程技术网

Python 覆盖二进制文件中的单个字节会使objdump无法识别它吗?

Python 覆盖二进制文件中的单个字节会使objdump无法识别它吗?,python,linux,python-3.x,Python,Linux,Python 3.x,我想覆盖二进制文件中特定偏移量处的单个字节。值cval是一个整数 为此,我编写了以下代码: f = open(program, "wb") f.seek(offset, 0) # absolute #print(f.read(1)) f.write(bytes([cval])) f.close() 读取偏移量处的字节时,代码工作正常,但写入此位置会导致objdump无法识别ELF二进制文件 mfo@mfo-Ubuntu:~/llvm-ir-obfuscation/checker$ objdum

我想覆盖二进制文件中特定
偏移量处的单个字节。值
cval
是一个整数

为此,我编写了以下代码:

f = open(program, "wb")
f.seek(offset, 0) # absolute
#print(f.read(1))
f.write(bytes([cval]))
f.close()
读取偏移量
处的字节时,代码工作正常,但写入此位置会导致
objdump
无法识别ELF二进制文件

mfo@mfo-Ubuntu:~/llvm-ir-obfuscation/checker$ objdump -dF fac_c
objdump: fac_c: File format not recognized

我看不出我做错了什么?

您使用
w
模式打开文件,该模式在打开文件时会截断文件。所以您的最终文件将只包含您编写的一个字节

只需在更新模式下打开它:

f = open(program, "r+b")

这应该很好。

请参阅关于Python文件I/O的本教程:

rb+:以二进制格式打开文件进行读写。这个 放置在文件开头的文件指针

让你困惑的可能是你认为rb+是阅读,wb+是写作。但是,这两种模式都会打开文件进行读写,而后者也会覆盖文件


由于后一种模式会覆盖文件,ELF二进制文件会被有效地销毁(标题消失)。

您确定没有在某些标题中写入内容吗?当我执行
f.read(1)
时,我在
.text
部分正确读取了位。然而,写操作在某种程度上把事情搞砸了。你真的应该因为在发布这个问题之前没有检查“未识别”的文件大小而被否决。