将操作码添加到现有二进制文件需要什么?

时间:2016-01-11 14:20:18

标签: c++ assembly portable-executable

我试图在.text部分的开头添加一个NOP指令,在我编写的一个简单的hello world可执行文件中,我知道它不仅仅是那么直接,所以我使用的是一个消失的库为了按顺序修补所有地址(例如,如果我将1字节操作码插入到二进制文件中,则该指令之后的所有地址将被推送1字节前进,因此我修补所有对该地址的调用以使用新的地址)。

我也在更新PE头的OptionalHeader中的AddressOfEntryPoint字段,以便入口点正确,但我仍然没有让它工作。

所以我的问题基本上是,我需要做什么来修复"在最开始添加1个单个nop指令后的可执行文件中(我检查了我没有通过插入它来破坏任何指令)。是否需要修复PE头中的更多字段?或者我在这里失踪了什么? :S

1 个答案:

答案 0 :(得分:2)

您可能需要relocate二进制可执行文件(在一般情况下可能无法实现,例如stripped binaries)。潜入Levine的Linkers and loaders书。

如果您可以重新编译该可执行文件,请考虑向其添加一些plugin个功能(并使用dynamic linking)。