IMO,这应该成立:
rva = raw - imagebase
图中不是这样,为什么?
答案 0 :(得分:4)
入口点RVA,入口点原始地址和图像基址与此无关。
图像库是“在内存中加载图像时第一个字节的首选地址”。换句话说,假设没有冲突,它是图像的虚拟地址。如果加载图像时存在地址冲突(例如,另一个图像已经在重叠范围内加载),则将为图像选择新的基址。
RVA是相对虚拟地址。它是“相对的”,因为它在实际加载图像时会发生变化。它是基地址未知时的地址(例如,未加载图像时)。加载映像后,RVA将成为虚拟地址(VA),即虚拟内存中的实际地址。
原始与RVA的区别在于对齐。部分对齐(部分在加载到内存时对齐)以及文件对齐(部分中原始数据的对齐)。这里的节对齐是0x1000,而文件对齐是0x200。
入口点RVA用于确定加载图像时入口点的VA(即入口点将位于虚拟地址EntryPoint (rva) + ImageBase
)。入口点原始地址是入口点所在文件的偏移量。
This document对对齐有很好的解释。