您的位置:首页 > 其它

在 Microsoft Symbol Server 上定位 PDB 文件

2008-11-19 14:15 393 查看
原文链接: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 数据目录之中,遵循如下的数据结构定义:

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_ 了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐