windbg如何确定为转储文件下载哪些操作系统符号



在进行转储文件分析时,我设置了指向Microsoft符号服务器的符号路径。windbg如何知道转储文件是在哪个操作系统下生成的,以及它如何为该操作系统下载正确的符号?

为了将符号匹配为二进制,WinDbg查看名为"调试目录"的东西。调试目录是PE模块中的部分(这是Windows对所有类型的可执行文件使用的文件格式)。调试目录只是包含到调试信息类型的链接。如果你在cmd窗口link /dump /headers <my_module_name>中输入command,它会打印出如下内容:

...
Debug Directories
    Time Type       Size      RVA  Pointer
-------- ------ -------- -------- --------
4CC78FB1 cv           22 00102588   101988    Format: RSDS, {30976E0B-FBF7-45EF-8608-99932F2B791F}, 2, ntdll.pdb
4CC78FB1 (   A)        4 00102584   101984    BB03197E
...

这是ntdll.dll的输出。你可以看到CV(对于CodeView)调试信息包含在ntdll中。并且该pdb的GUID必须与链接中的GUID匹配。该GUID在构建时为每个模块随机生成。

命令!lmi在WinDbg中也会以不同的格式转储这些信息。

当WinDbg从符号服务器加载符号时,它会向符号服务器发送请求以获取名为"ntdll"的文件。带有匹配GUID的pdb'。

最新更新