c++ - VS2008调试器和kernel32.dll

标签 c++ windows debugging kernel32

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

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

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

最佳答案

这与

的工作原理相同
GetThreadContext(hThread, lpContext);

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

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

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

关于c++ - VS2008调试器和kernel32.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4349352/

相关文章:

java - adb 找不到我的设备进行 Android 调试。为什么?

javascript - 如何在单击第 3 方按钮时设置断点?

c++ - c++中的atof、结构和指针

python - 如何在 Windows8 上安装 Pygame 以使用 Python 3.3.3?

c++ - 多维数组C++中沿维度的最小值

.net - CLR 如何实现 COM 实现的二进制级别的互操作性?或者不?

适用于企业的 Windows 内存缓存

javascript - PhpStorm/WebStorm 中带有调试器语句的即时断点

C++,指向函数的指针作为新类型

c++ - 如何在 Windows 上编译 mergevec.cpp?