我有一个现有的PE二进制文件,我手动修补 . 我正在复制 .text 部分(在开头)并将其添加到部分表的末尾 . 然后我用 0xCC 覆盖第一个/旧的 .text 部分 . 由于这种变化,指令本身的虚拟地址当然会改变 . 由于我在添加/移动的 .text 部分中有 mov eax, dword ptr [rip + 0x2024] (它将指向 .data 部分中的地址)的指令,它将指向错误的东西(因为 rip 是不同的,因为整个指令是在新的RVA,它不会再指向 .data 部分中的该位置) .

我是否还需要手动修补实际的机器代码,以便它再次指向 .data 部分中的正确偏移量?或者是否有更好/更智能的方法来修复我的PE图像,以便现有的机器代码在新的/移动的部分中工作?

我想在最后将它移动到新的部分是因为我正在改变原始代码(添加死代码,nops等) . 由于这会导致代码的大小发生变化,因此在新的部分中移动整个变异代码(可能比原始代码大2-3倍)似乎更好 . 现在我正在拆解原始代码并修复所有 calljmpjcc 指令以使用正确的RVA . 我在这里做的工作多于必要吗?

是否可以使用重定位以更简单的方式实现我想要的东西?