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

时间:2017-04-13 09:41:48

标签: python linux python-3.x

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

为此,我写了以下代码:

f = open(program, "wb")
f.seek(offset, 0) # absolute
#print(f.read(1))
f.write(bytes([cval]))
f.close()

offset读取字节时,代码工作正常,但写入此位置会导致objdump无法识别ELF二进制文件。

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

我不知道自己做错了什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

它应该没问题。

答案 1 :(得分:1)

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

https://developer.chrome.com/extensions/content_scripts#execution-environment

  

rb + :打开二进制格式的读写文件。该   文件指针放在文件的开头。

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

因为后一种模式会覆盖文件,所以ELF二进制文件会被有效破坏(标题已经消失)。