browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

在 Microsoft Symbol Server 上定位 PDB 文件

Posted by on 2008 年 11 月 18 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

Windows 系统文件的调试符号保存在 Microsoft Symbol Server 上面,每个文件的链接格式为:

http://msdl.microsoft.com/download/symbols/PDB 文件名/PE 特征签名/PDB 文件名.pd_

其中,PE 映像签名和 PDB 文件名都保存在 PE 文件的 IMAGE_DIRECTORY_ENTRY_DEBUG 数据目录之中,遵循如下的数据结构定义:

1
2
3
4
5
6
typedef struct _tagCV_RSDS {
    DWORD dwHeader;
    GUID Signature;
    DWORD dwAge;
    CHAR pdb[1];
} CV_RSDS, *PCV_RSDS;

这个结构各个域的含义如下:

  • dwHeader 的值应为 0x53445352 ,即字符串 "RSDS" 。
  • Signature 为 PE 的映像签名。
  • dwAge 域和 Signature 组合使用,成为 PE 的特征签名。
  • pdb 为该 PE 对应的 PDB 文件名。

以一个 kernel32.dll 为例(版本 5.1.2600.2945),它的 CV_RSDS 结构如下图:

这样一来,便可得到它的特征签名为 "BCE8785C57B44245A669896B6A19B9542" ,完整的下载链接为:

http://msdl.microsoft.com/download/symbols/kernel32.pdb/BCE8785C57B44245A669896B6A19B9542/kernel32.pd_

需要指出的是,下载这个文件的时候,需要将 HTTP 请求的 agent 参数设置为微软所允许的字符串,否则就有可能(并不是必然,原因不明)被 Microsoft Symbol Server 拒绝。因此,推荐使用 srmsrv.dll 中的 agent ,如 "Microsoft-Symbol-Server/6.9.0003.113" 。
在下载完成后,就可以使用 Windows 自带的 expand.exe 来解压缩 kernel32.pd_ 了。

订阅本站

一条评论

  • At 2008.11.20 09:51, luther said:

    这个东西不错,收下.

    (Required)
    (Required, will not be published)