VS2008调试器和kernel32.dll

时间:2010-12-03 19:54:54

标签: c++ windows debugging kernel32

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

来获取它的地址
unsigned long address = (unsigned long)(&GetThreadContext);

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

1 个答案:

答案 0 :(得分:3)

这与

的原因相同
GetThreadContext(hThread, lpContext);

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

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

[我不禁想到我对这个问题遗漏了一些东西。告诉我这不是你的问题。]