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