我一直在调试一个使用kernel32.dll中的“GetThreadContext”的进程(在C ++ / windows中)。 我注意到我可以用
来获取它的地址unsigned long address = (unsigned long)(&GetThreadContext);
但是当我查看加载的模块选项卡时 - 我看到没有加载kernel32.dll的符号!
VS2008是如何知道“GetThreadContext”的地址的呢?
如果没有PDB,我怎么能自己做呢?
谢谢:))
答案 0 :(得分:3)
这与
的原因相同GetThreadContext(hThread, lpContext);
的工作原理。必须在链接时解析代码中使用的命名函数,否则链接将失败。无论您是使用&
取得他们的地址还是打电话都没关系。在运行时,加载DLL,然后函数名称解析为进程中的特定地址。
PDB文件仅用于在调试期间提供增强的符号信息。通常,它们不会在运行时使用。
[我不禁想到我对这个问题遗漏了一些东西。告诉我这不是你的问题。]