处理来自不同部分的数据

时间:2017-10-26 04:41:20

标签: assembly x86 portable-executable

我正在修改可执行文件,并希望将数据添加到.rdata部分。我在调试器中工作时可以正确读取它,但在运行独立的修补程序可执行文件时却没有。

如果我理解正确,问题是可执行文件可以加载到不同的基址中,这意味着我的MOV指令中的绝对地址实际上并不指向我的数据。

如何让加载程序正确翻译附加说明中的地址?或者,如果我知道RVA,是否可以在运行时计算VA?

1 个答案:

答案 0 :(得分:0)

您还需要修改可执行文件的重定位部分

  

.reloc部分包含一个基本重定位表。基址重定位是对指令的调整   如果加载器无法加载链接器所假定的文件,则需要初始化的变量值。如果   loader能够在链接器的首选基地址加载映像,加载器完全忽略重定位   本节中的信息。

您应该如何修改此部分超出我的范围,但在这里您可以找到有关Microsoft软件的.reloc部分结构的文档:The .reloc Section