【问题标题】:Virtual Address assigned to an imported function分配给导入函数的虚拟地址
【发布时间】:2018-10-05 16:35:15
【问题描述】:

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

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

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

谢谢大家。

【问题讨论】:

    标签: windows assembly x86 portable-executable


    【解决方案1】:

    我不明白第一个问题.. 如果您的意思是对于那些不是 RVA 的函数导入,它们是平面地址。此外,在代码寻址的情况下,指令使用的地址始终与当前指令指针值相关。 RVA 仅由加载程序使用(以及 LoadLibrary、GetProcAddr 等函数).. 我认为。 x86 处理器不知道 RVA 的概念,这是肯定的。也许你知道,这对我来说不是很清楚,如果是这样的话,抱歉讲课。 问题二!不!它不是固定的!加载程序实际上会通过您的 exe 的导入表并填写占位符。自 windows xp sp3 以来,固定加载地址不再是问题。希望这可以帮助。如果没有,这对我小时候的我有帮助https://msdn.microsoft.com/en-us/library/ms809762.aspx

    【讨论】:

      猜你喜欢
      • 2012-04-22
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多