在 Microsoft Symbol Server 上定位 PDB 文件

原文链接:http://www.titilima.cn/?action=show&id=281

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

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

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

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

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

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

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

大小: 9.29 K
尺寸: 442 x 134
浏览: 2 次
点击打开新窗口浏览全图

这样一来,便可得到它的特征签名为 "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_ 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值