我已经设置 WinDbg 进行混合(用户模式到内核模式)调试。
在用户模式应用程序中,我CreateFile()
使用某些参数进行调用。我想CreateFile()
在用户模式进程上下文中中断调用,并从那里跟踪其执行情况。
CreateFile
我尝试使用命令搜索符号x
。问题是x nt!*CreateFile*
无法找到相应的符号。在它列出的一堆符号中,我能找到的最接近的是nt!NtCreateFile
,它似乎具有不同的签名,并且可能是内部 API。
为什么CreateFile()
WinDbg 中缺少该符号?
Windows 中的函数名称
您可以使用搜索词“MSDN <function>”搜索 Microsoft Windows API 函数。如果您这样做,您将转到
CreateFileA()
。该网站告诉您该函数在 中定义fileapi.h
。查看内部
fileapi.h
(在本地机器上找到它,例如使用Everything),您会发现以下几行:因此,
CreateFile()
只是CreateFileA()
或的别名CreateFileW()
,取决于您是针对 ANSI 还是 Unicode 进行编译。您会发现许多函数都是这样重定向的,并且具有
...A()
命名...W()
约定。这是 MS在 Windows API 中对 Unicode的概述,他们使用另一个示例解释了这些约定。调试
在同一个网站上,有一个名为“要求”的部分,其中写道
因此可以使用以下方式设置断点
但是你的
x
方法也是有效的,如果你在所有模块中搜索,比如设置两个断点(A 和 W)后,您应该找到该函数: