我正在修改可执行文件,并希望将数据添加到.rdata
部分。我在调试器中工作时可以正确读取它,但在运行独立的修补程序可执行文件时却没有。
如果我理解正确,问题是可执行文件可以加载到不同的基址中,这意味着我的MOV
指令中的绝对地址实际上并不指向我的数据。
如何让加载程序正确翻译附加说明中的地址?或者,如果我知道RVA,是否可以在运行时计算VA?
答案 0 :(得分:0)
您还需要修改可执行文件的重定位部分
.reloc部分包含一个基本重定位表。基址重定位是对指令的调整 如果加载器无法加载链接器所假定的文件,则需要初始化的变量值。如果 loader能够在链接器的首选基地址加载映像,加载器完全忽略重定位 本节中的信息。
您应该如何修改此部分超出我的范围,但在这里您可以找到有关Microsoft软件的.reloc部分结构的文档:The .reloc Section