我想覆盖特定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
我不知道自己做错了什么?
答案 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二进制文件会被有效破坏(标题已经消失)。