windbg如何确定为转储文件下载哪些OS符号

时间:2011-10-27 19:07:45

标签: debugging windbg symbols

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

1 个答案:

答案 0 :(得分:2)

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

...
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中,并且该PDB的GUID必须与链接中的GUID相匹配。在构建时为每个模块随机生成GUID。

WinDbg中的命令!lmi也将以不同的格式转储此信息。

从符号服务器加载符号时,WinDbg执行的操作是向符号服务器发送请求以获取具有匹配GUID的名为“ntdll.pdb”的文件。