1

替代文字

IMO,这应该成立:

rva = raw - imagebase

图中不是这种情况,为什么?

4

1 回答 1

4

入口点 RVA、入口点原始地址和映像基地址没有这种关系。

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

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

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

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

该文档对对齐有很好的解释。

于 2010-09-19T14:04:50.027 回答