PE文件结构 | RVA与FOA的转换

引出问题:如果想改变全局变量的初始值,该怎么做?

如果有初始值,初始值是存在PE文件中的。
在文件中和在内存中的对齐方式不一样。

!!!有些情况下内存对齐和文件对齐一样的也需要计算才能找到对应的位置!!!

内存中展开从ImageBase(扩展PE头中)开始,然后依次对齐。
RVA:
相对虚拟地址
=内存中的地址-ImageBase
FOA:
file offset address
转化:
1.判断RVA是不是在头部,如果在直接查
2.判断当前的值在哪一个节里面,与节表中的VritualAddress进行比较
如果在,用RVA-节.VirtualAddress算出偏移
FOA = 节.PointerToRawData + 偏移
反过来的转化同理~

 

over.

posted @ 2020-12-12 12:45  Mz1  阅读(197)  评论(0编辑  收藏  举报