0

我一直在调试一个使用 kernel32.dll 中的“GetThreadContext”的进程(在 C++/windows 中)。
我注意到我可以得到它的地址

unsigned long address = (unsigned long)(&GetThreadContext);

但是当我查看加载的模块选项卡时 - 我看到 kernel32.dll 的符号没有加载!
VS2008是怎么知道“GetThreadContext”的地址的?
如果没有 PDB,我怎么能自己做呢?
谢谢 :)

4

1 回答 1

3

这工作的原因相同

GetThreadContext(hThread, lpContext);

作品。代码中使用的命名函数必须在链接时解析,否则链接将失败。无论您是使用他们的地址&还是打电话给他们都没有关系。在运行时,DLL 被加载,然后函数名称解析为进程中的特定地址。

PDB 文件仅用于在调试期间提供增强的符号信息。通常,它们不会在运行时使用。

[我忍不住想我错过了这个问题的一些东西。如果这不是你的问题,请告诉我。]

于 2010-12-03T19:58:36.010 回答