【问题标题】:Debugging XP SP2/SP3 native application symbol path issue调试 XP SP2/SP3 本机应用程序符号路径问题
【发布时间】:2022-03-05 00:05:16
【问题描述】:

当我尝试验证是否正确设置了 WinDbg 时,我打开了可执行文件 C:\WINDOWS\NOTEPAD.exe 并尝试检查加载的模块。

首先,这些是设置的环境变量:

    _NT_SYMBOL_PATH: c:\mysymbols;SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
    _NT_EXECUTABLE_IMAGE_PATH: SRV*c:\symbols

这是 WinDbg 的输出:

CommandLine: C:\WINDOWS\NOTEPAD.EXE
Symbol search path is: SRV*C:\symbols*https://msdl.microsoft.com/download/symbols;c:\mysymbols
Executable search path is: SRV*c:\symbols
ModLoad: 01000000 01014000   notepad.exe
ModLoad: 7c910000 7c9c9000   ntdll.dll
ModLoad: 7c800000 7c908000   C:\WINDOWS\system32\kernel32.dll
ModLoad: 76350000 7639a000   C:\WINDOWS\system32\comdlg32.dll
ModLoad: 77da0000 77e4a000   C:\WINDOWS\system32\ADVAPI32.dll
ModLoad: 77e50000 77ee3000   C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fc0000 77fd1000   C:\WINDOWS\system32\Secur32.dll
ModLoad: 773a0000 774a3000   C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\COMCTL32.dll
ModLoad: 77be0000 77c38000   C:\WINDOWS\system32\msvcrt.dll
ModLoad: 77ef0000 77f39000   C:\WINDOWS\system32\GDI32.dll
ModLoad: 7e360000 7e3f1000   C:\WINDOWS\system32\USER32.dll
ModLoad: 77f40000 77fb6000   C:\WINDOWS\system32\SHLWAPI.dll
ModLoad: 7e670000 7ee91000   C:\WINDOWS\system32\SHELL32.dll
ModLoad: 72f70000 72f96000   C:\WINDOWS\system32\WINSPOOL.DRV
(ef8.f6c): Break instruction exception - code 80000003 (first chance)
eax=001a1eb4 ebx=7ffd5000 ecx=00000007 edx=00000080 esi=001a1f48 edi=001a1eb4
eip=7c91120e esp=0007fb20 ebp=0007fc94 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
ntdll!DbgBreakPoint:
7c91120e cc              int     3

我打开了 sym 噪声模式,调用了 .reload 并在尝试列出加载的模块时得到了持续的输出:

0:000> !sym noisy
noisy mode - symbol prompts on
0:000> .reload
Reloading current modules
..............
DBGHELP: c:\mysymbols\ntdll.pdb - mismatched pdb
DBGHELP: c:\mysymbols\symbols\dll\ntdll.pdb - file not found
DBGHELP: c:\mysymbols\dll\ntdll.pdb - file not found
SYMSRV:  Die Serververbindung wurde zurückgesetzt.
SYMSRV:  c:\symbols\ntdll.pdb\A618C674A4FC40F5B1781029C2C7F68E2\ntdll.pdb not found
SYMSRV:  https://msdl.microsoft.com/download/symbols/ntdll.pdb/A618C674A4FC40F5B1781029C2C7F68E2/ntdll.pdb not found
DBGHELP: C:\WINDOWS\system32\ntdll.pdb - file not found
DBGHELP: ntdll.pdb - file not found
DBGHELP: Couldn't load mismatched pdb for C:\WINDOWS\system32\ntdll.dll
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
DBGHELP: ntdll - export symbols

0:000> lm
start    end        module name
01000000 01014000   notepad    (deferred)             
72f70000 72f96000   WINSPOOL   (deferred)             
76350000 7639a000   comdlg32   (deferred)             
773a0000 774a3000   COMCTL32   (deferred)             
77be0000 77c38000   msvcrt     (deferred)             
77da0000 77e4a000   ADVAPI32   (deferred)             
77e50000 77ee3000   RPCRT4     (deferred)             
77ef0000 77f39000   GDI32      (deferred)             
77f40000 77fb6000   SHLWAPI    (deferred)             
77fc0000 77fd1000   Secur32    (deferred)             
7c800000 7c908000   kernel32   (deferred)             
7c910000 7c9c9000   ntdll      (export symbols)       C:\WINDOWS\system32\ntdll.dll
7e360000 7e3f1000   USER32     (deferred)             
7e670000 7ee91000   SHELL32    (deferred)             

7c910000 7c9c9000 ntdll (export symbols) C:\WINDOWS\system32\ntdll.dll 行显示,符号文件无法成功加载。

我已经下载并安装了符号(如WindowsXP-KB835935-SP2-slp-Symbols),但 PDB 文件似乎与我的 ntdll.dll 构建不匹配。但为什么会这样呢?我有没有机会让它工作?

【问题讨论】:

  • 我明白了,谢谢。过去,离线符号已提供下载,不幸的是没有机会再获得旧符号了。这些符号是否也随旧的 (2005/2010) Visual Studio 安装光盘一起提供? (工具\符号)
  • 非常感谢!我查看了 xp 存档,它有 xp、sp1 和 sp2 符号。我实际上使用的是 sp3,我应该使用哪一个,这样我上面发布的示例在我将符号放入 c:\symbols 后实际上可以工作?
  • 我首先将 sp2 符号添加到 c:\symbols 路径(带有 dll 子目录等),但找不到 pdb。当我将 ntdll.pdb 直接放在 c:\symbols 中时,windbg 尝试创建一个 GUID 子目录,但出现错误,即无法创建里面的 pdb。然后我将 pdb 放在 c:\mysymbols 中并得到一个不匹配的 pdb 错误。虽然它可能不适用于带有这些符号的 SP3,但将 pdb 放入其中的正确方法/结构与符号路径相结合是什么?当实际创建 GUID 子目录但仍然找不到文件时,这些错误消息对我来说确实不合逻辑。
  • @ThomasWeller:我什至在 XP Home SP2 机器上尝试了符号 ntdll.pdb(sp2 符号),同样的消息:不匹配的 pdb。这很令人沮丧,真的很令人沮丧。你有机会自己测试吗?写信给 windbgfb@microsoft.com 有意义吗?

标签: debugging windows-xp windbg unmanaged


【解决方案1】:

由于无法停止思考问题的根源,我重新阅读了上面的输出:

SYMSRV:  c:\symbols\ntdll.pdb\A618C674A4FC40F5B1781029C2C7F68E2\ntdll.pdb not found
SYMSRV:  https://msdl.microsoft.com/download/symbols/ntdll.pdb/A618C674A4FC40F5B1781029C2C7F68E2/ntdll.pdb not found

调试器正在寻找具有 GUID A618C674A4FC40F5B1781029C2C7F68E2 的符号文件,它甚至会输出它试图从中加载 pdb 的 URI。因此,我尝试手动下载 pdb,它成功了,手动创建了 GUID 目录,将 blob 文件重命名为 ntdll.pdb 并将其放在 GUID 目录中。

结果,它终于成功了,如下输出所示:

:000> .reload
Reloading current modules
............
DBGHELP: c:\mysymbols\ntdll.pdb - mismatched pdb
DBGHELP: c:\mysymbols\symbols\dll\ntdll.pdb - file not found
DBGHELP: c:\mysymbols\dll\ntdll.pdb - file not found
DBGHELP: ntdll - public symbols  
         c:\symbols\ntdll.pdb\A618C674A4FC40F5B1781029C2C7F68E2\ntdll.pdb
..


0:000> lm
start    end        module name
01000000 01014000   notepad    (deferred)             
72f70000 72f96000   WINSPOOL   (deferred)             
76350000 7639a000   comdlg32   (deferred)             
773a0000 774a3000   COMCTL32   (deferred)             
77be0000 77c38000   msvcrt     (deferred)             
77da0000 77e4a000   ADVAPI32   (deferred)             
77e50000 77ee2000   RPCRT4     (deferred)             
77ef0000 77f38000   GDI32      (deferred)             
77f40000 77fb6000   SHLWAPI    (deferred)             
77fc0000 77fd1000   Secur32    (deferred)             
7c800000 7c907000   kernel32   (deferred)             
7c910000 7c9c9000   ntdll      (pdb symbols)          c:\symbols\ntdll.pdb\A618C674A4FC40F5B1781029C2C7F68E2\ntdll.pdb
7e360000 7e3f0000   USER32     (deferred)             
7e670000 7ee90000   SHELL32    (deferred)             

编辑:我终于能够从符号服务器自动下载工作了!一开始我一直在考虑,但不相信这可能是原因:使用较新的版本 6.12.0002.633 确实可以按预期工作,而使用 6.6.07.5 则没有。

【讨论】:

  • 你有代理吗?或者一些取代 HTTPS 证书的防火墙?您是否尝试过 HTTP 而不是 HTTPS?
  • 不,版本一直是问题,我在上面更新了我的答案。现在它终于奏效了。
  • 试用 WinDbg 10 预览版。与 6.x 相比,这是一个很大的改进。 6.6.7.5 真的老了
  • 谢谢你的注意,我也去看看。
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
相关资源
最近更新 更多