RVA与FOA的转换
RVA与FOA的转换的计算公式
1)RAV的值:内存地址 - ImageBase
2)判断RAV是否位于PE头中,如果是:FOA = RAV
3)判断RAV位于哪个节:
-----------RAV >= 节.VirtualAddress
-----------RAV >= 节.VirtualAddress + 当前节内存对齐后的大小
-----------差值 = RAV - 节.VirtualAddress
4)FOA = 节.PointerToRawData + 差值
如何在PE文件中更改程序的全局变量
RAV的值:内存地址 - ImageBase
全局变量a在内存中的地址:425a30
rav = 425a30 - 400000
= 25a30
由于现在的编译器,编译过后的文件对齐与内存对齐一至,所以 FOA 的值:内存地址 - ImageBase = 0x25a30
修改 0x25a30 中的值
保存并运行程序