如何理解此图中的PE头?

时间:2010-09-19 13:15:28

标签: portable-executable

alt text

IMO,这应该成立:

rva = raw - imagebase

图中不是这样,为什么?

1 个答案:

答案 0 :(得分:4)

入口点RVA,入口点原始地址和图像基址与此无关。

图像库是“在内存中加载图像时第一个字节的首选地址”。换句话说,假设没有冲突,它是图像的虚拟地址。如果加载图像时存在地址冲突(例如,另一个图像已经在重叠范围内加载),则将为图像选择新的基址。

RVA是相对虚拟地址。它是“相对的”,因为它在实际加载图像时会发生变化。它是基地址未知时的地址(例如,未加载图像时)。加载映像后,RVA将成为虚拟地址(VA),即虚拟内存中的实际地址。

原始与RVA的区别在于对齐。部分对齐(部分在加载到内存时对齐)以及文件对齐(部分中原始数据的对齐)。这里的节对齐是0x1000,而文件对齐是0x200。

入口点RVA用于确定加载图像时入口点的VA(即入口点将位于虚拟地址EntryPoint (rva) + ImageBase)。入口点原始地址是入口点所在文件的偏移量。

This document对对齐有很好的解释。