WinDBG 在调试内核模块时不解析函数名称

逆向工程 艾达 风袋 司机 调试符号 核心
2021-06-19 02:19:41

我正在调试内核驱动程序。当我在 WinDBG 的其中一个函数中设置断点但它没有完成函数名称时,它在 IDA 上显示名称(静态)。

这是IDA的图片(有最后三个函数的名字),右边是没有名字的WinDBG:
在此处输入图片说明

我读到了类似的问题为什么 WinDbg 不解析函数名称?通过运行来尝试这个建议

.symfix C:\debug\symbols
.sympath+ C:\debug\mypdbs
.reload /f

我重新打开反汇编窗口,我仍然没有看到函数名称。

编辑(回答问题):

  1. Windbg 预览版:
Debugger client version: 1.0.2007.06001  
Debugger engine version: 10.0.20153.1000  
  1. 来宾的操作系统版本: Windows 10 x64 1909 (OS Build 18363.1082)

  2. 的输出lm m cfs

kd> lm m cfs
Browse full module list
start             end                 module name
fffff800`2abd0000 fffff800`2abd0c00   cfs        (no symbols)    
  1. 符号路径设置为:
SRV*c:\symbols*https://msdl.microsoft.com/download/symbols

所以我认为它已加载,尽管在第 3 节中它写了“无符号”。
我也跑了,.reload /f但没有帮助。

  1. 是的,它有效,但前提是我在调用本身上设置断点:
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)
  1. 它们正在动态下载:

    SRV c:\symbols https://msdl.microsoft.com/download/symbols

在环境变量中,我设置了它:

_NT_SYMBOL_PATH
SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
  1. 我不明白你的意思,有很多模块,我需要去每个模块并通过它吗?
    不知道该怎么做。
1个回答

这些应该是评论但它长大了

  1. 什么是windbg版本?
  2. 什么是操作系统版本?
  3. 什么是输出 lm m "your specific Module"
  4. 是否为您的模块加载了符号?
  5. 您是否尝试过u <address>在命令窗口中进行反汇编,因为看起来您正在查看反汇编窗口
  6. 您是否尝试ln <address>列出最近的符号?
  7. 是使用符号服务器动态下载的 os 模块的符号,或者它们是否已经在您提供的 sympath 中可用,即 c:\debug\symbols
  8. 如果您正在使用 _NT_SYMBOL_PATH env var 下载操作系统符号,您是否尝试在该路径中添加此模块 pdb

OP编辑时的进一步查询

lm m 模式不显示符号,
因此这意味着未加载特定模块的符号。

这是 avast 防病毒模块的输出

kd> lm m aswh*
start    end        module name
67670000 67680000   aswhook    (no symbols)
kd> x aswhook!*
kd> lm m aswAr*
start    end        module name
89563000 8956b000   aswArDisk   (export symbols)       aswArDisk.sys
8f580000 8f5bd000   aswArPot   (no symbols)
kd> x aswar*!a
kd> x aswar*!a*
89564810          aswArDisk!ArDiskRegisterCallback (<no parameter info>)
kd>

所以检查你是否有 cfs.pdb 可能会发生你有 cfs.pdb 但它不匹配并且 windbg 拒绝加载它(如果需要,你可以使用 .symopt+ 覆盖这个行为)

打开嘈杂的符号加载并尝试再次加载符号,您可能会得到一些线索

kd> !sym noisy
noisy mode - symbol prompts off

kd> .reload /f aswh*
SYMSRV:  BYINDEX: 0x4E1
         e:\symbols*http://msdl.microsoft.com/download/symbols
         aswhook.pdb
         0213A2A553DE465F9D36B7374431DBF61
SYMSRV:  UNC: e:\symbols\aswhook.pdb\0213A2A553DE465F9D36B7374431DBF61\aswhook.pdb - path not found
SYMSRV:  UNC: e:\symbols\aswhook.pdb\0213A2A553DE465F9D36B7374431DBF61\aswhook.pd_ - path not found
SYMSRV:  UNC: e:\symbols\aswhook.pdb\0213A2A553DE465F9D36B7374431DBF61\file.ptr - path not found
SYMSRV:  HTTPGET: /download/symbols/aswhook.pdb/0213A2A553DE465F9D36B7374431DBF61/aswhook.pdb
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/aswhook.pdb/0213A2A553DE465F9D36B7374431DBF61/aswhook.pd_
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  HTTPGET: /download/symbols/aswhook.pdb/0213A2A553DE465F9D36B7374431DBF61/file.ptr
SYMSRV:  HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV:  RESULT: 0x80190194
DBGHELP: D:\BUILD\work\01\e690e03dcc42bde1\idp\build\avgast\RU_NTDLL-lH-Y2A!Win32_vs141\bin\Release_Unicode_NTDLL_vs141\Win32\aswhook.pdb - file not found
DBGHELP: aswhook - no symbols loaded
WARNING: .reload failed, module list may be incomplete
kd>

至于将您的 pdb 添加到 _NT_SYMBOL_PATH 阅读有关 symstore 文档的信息,您不必添加所有模块,只需添加您拥有 pdb 的特定模块,但由于各种原因,windbg 无法找到它(主要原因是调试目录中 pdb 的硬编码路径)这当然不会存在于您的机器中

Debug Directories(4)
        Type       Size     Address  Pointer
        cv           99        879c     7b9c    Format: RSDS, guid, 1, D:\BUILD\work\01\e690e03dcc42bde1\idp\build\avgast\RU_NTDLL-lH-Y2A!Win32_vs141\bin\Release_Unicode_NTDLL_vs141\Win32\aswhook.pdb
        (    12)      14        8838     7c38
        (    13)     1d0        884c     7c4c
        (    14)       0           0        0