我正在调试内核驱动程序。当我在 WinDBG 的其中一个函数中设置断点但它没有完成函数名称时,它在 IDA 上显示名称(静态)。
这是IDA的图片(有最后三个函数的名字),右边是没有名字的WinDBG:

我读到了类似的问题为什么 WinDbg 不解析函数名称?我通过运行来尝试这个建议:
.symfix C:\debug\symbols
.sympath+ C:\debug\mypdbs
.reload /f
我重新打开反汇编窗口,我仍然没有看到函数名称。
编辑(回答问题):
- Windbg 预览版:
Debugger client version: 1.0.2007.06001
Debugger engine version: 10.0.20153.1000
来宾的操作系统版本:
Windows 10 x64 1909 (OS Build 18363.1082)的输出
lm m cfs:
kd> lm m cfs
Browse full module list
start end module name
fffff800`2abd0000 fffff800`2abd0c00 cfs (no symbols)
- 符号路径设置为:
SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
所以我认为它已加载,尽管在第 3 节中它写了“无符号”。
我也跑了,.reload /f但没有帮助。
- 是的,它有效,但前提是我在调用本身上设置断点:
kd> u fffff802`504a6460
nt!RtlInitUnicodeString:
fffff802`504a6460 48c70100000000 mov qword ptr [rcx],0
fffff802`504a6467 48895108 mov qword ptr [rcx+8],rdx
fffff802`504a646b 4885d2 test rdx,rdx
fffff802`504a646e 7501 jne nt!RtlInitUnicodeString+0x11 (fffff802`504a6471)
fffff802`504a6470 c3 ret
fffff802`504a6471 48c7c0ffffffff mov rax,0FFFFFFFFFFFFFFFFh
fffff802`504a6478 0f1f840000000000 nop dword ptr [rax+rax]
fffff802`504a6480 48ffc0 inc rax
您可以看到它解析了名称,nt!RtlInitUnicodeString但只有在它遇到断点时,您才能看到它没有解析接下来的两个指令:

6.
kd> ln fffff802`504a6460
Browse module
Set bu breakpoint
(fffff802`504a6460) nt!RtlInitUnicodeString | (fffff802`504a64b0) nt!KeEnterCriticalRegion
Exact matches:
nt!RtlInitUnicodeString (void)
它们正在动态下载:
SRV c:\symbols https://msdl.microsoft.com/download/symbols
在环境变量中,我设置了它:
_NT_SYMBOL_PATH
SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
- 我不明白你的意思,有很多模块,我需要去每个模块并通过它吗?
不知道该怎么做。