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

标签 c++ assembly portable-executable

我正在尝试在我编写的简单的 hello world 可执行文件中的 .text 部分的开头添加一条 NOP 指令,我知道这不仅仅是那么简单,所以我正在使用反汇编库为了相应地修补所有地址(例如,如果我在二进制文件中插入 1 字节操作码,则该指令之后的所有地址将向前推 1 字节,因此我修补对该地址的所有调用以使用新地址)。

我还更新了 PE header 的OptionalHeader 中的AddressOfEntryPoint 字段,以便入口点正确,但我仍然无法使其正常工作。

所以我的问题基本上是,在一开始添加 1 个 nop 指令后,我需要在可执行文件中“修复”什么(并且我检查了插入它不会破坏任何指令)。 PE header 中是否还有更多字段需要修复?或者我在这里缺少什么? :S

最佳答案

你很可能必须 relocate您的二进制可执行文件(在一般情况下可能不可能,例如 stripped binaries )。潜入 Levine Linkers and loaders书。

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

关于c++ - 将操作码添加到现有二进制文件需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34723743/

相关文章:

使用 Visual Studio 调试 ASM - 注册内容不会显示

c++ - 冒泡排序。 C++

c++ - 从指针 vector 中删除对象

c++ - 在 CMake 中链接外部 HDFql 库

c++ - 我需要从一个目录中汇总数千个直方图

assembly - 在 Grub2 中引导自定义内核

c - "int"之间的区别

c++ - DLL 的导入目录不适用于 64 位 dll

hex - 为什么PE文件中的MZ DOS Header Signature是0x54AD?

portable-executable - 如何在 IDA pro 中显示 PE header ?