2010-09-19 60 views

回答

4

入口点RVA,入口点原始地址和图像基地址不是这样相关的。

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

RVA是一个相对虚拟地址。从图像实际加载时改变它是“相对的”。这是基地址未知的地址(例如,当图像未加载时)。加载映像后,RVA将成为虚拟地址(VA),即虚拟内存中的实际地址。

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

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

This document对校准有很好的解释。

+0

我不完全明白你的意思是'偏移入口点所在的文件',你能详细说明吗? – COMer 2010-09-19 15:05:09

+0

我可能不正确,但我的理解是入口点在加载时(RVA +图像库)在内存中有一个地址,当图像未加载时,在磁盘上有一个“地址”。磁盘上的“地址”实际上只是文件的偏移量。因此,如果您想在不必首先加载映像的情况下开始拆卸入口点,则可以在文件中寻找原始入口点地址。 – 2010-09-19 22:16:05

+0

在加载图像时,应该根据EntryPoint(raw)计算'EntryPoint(rva)',是吗? – wamp 2010-09-25 03:43:28