分配给导入功能的虚拟地址

时间:2018-04-25 09:06:30

标签: windows assembly x86 portable-executable

考虑像CALL DWORD PTR 44244100这样的指令,它在汇编程序中导入和使用DLL函数。我们知道指令使用的地址是相对虚拟地址(RVA)。

1.当我通过它追踪那段代码时,为什么我会在LordPE软件的Thunk值字段中达到另一个VA值?

2. User32或Kernel32之类的DLL是否总是加载到特定的VA或不一定? 如果不是这样,Loader如何识别上面提到的地址属于哪个DLL?通过在名表中搜索?! 我的意思是这个地址是不变的,所以如果加载的dll的位置也是固定的,那么应该首先为该地址分配另一个VA。

谢谢大家。

1 个答案:

答案 0 :(得分:0)

我不明白第一个问题..如果你的意思是thunk和函数导入那些不是RVA,那些是扁平地址。在代码寻址的情况下,指令使用的地址也总是相对于当前指令指针值。 RVAs只用于加载器(和LoadLibrary,GetProcAddr等函数)。我想。 x86处理器不知道RVA的概念是肯定的。也许你知道这一点,对我来说不是很清楚,如果是这样,对不起讲课。 问题二!没有!这不是固定的!加载器实际上通过你的exe的导入表并填写占位符。自windows xp sp3以来,固定加载地址不再是一个东西。希望这可以帮助。如果没有,这对我来说是个小土豆https://msdn.microsoft.com/en-us/library/ms809762.aspx