二进制文件和符号文件(PDB)如何校验是否匹配

 1. 静态检查

windbg 调试工具包中有一个工具symchk.exe, 选项很多, 下面一个简单的用法可以检查一个 test.exe能不能找到与它匹配的PDB:

 

 这是成功的情形. 下面来个失败的作为对比:

 

2. 如果已经在windbg内部, 可以通过下面的命令检查

 

 最后一行说 MATCH, 肯定没问题.

 

3. 在windbg中(在VS中不行), 如果你100%确信源代码没有任何改动, 只不过被重新编译了一下.
可以通过 .symopt +40 来关闭对GUID的强行检查. 从而load一个不匹配的PDB.

4. 除了1中提到的工具, 还有一个叫chkmatch 的工具, 在
http://www.debuginfo.com/download/chkmatch.zip
可以下载, 该工具不仅可以检查是否匹配, 还可以把不匹配的强制改为匹配, 也就是说EXE/DLL和PDB中的GUID相同, 这样在VS中就可以使用了, 当然, 高度危险, 后果自负.

通过 ChkMatch.exe (DebugInfo.com - ChkMatch tool) 工具来确认二进制文件和pdb是否匹配。

命令行:ChkMatch.exe -c ExeFile DebugInfoFile

ExeFile 表示 二进制文件

DebugInfoFile 表示 符号文件

例如:

ChkMatch.exe -c chrome.dll chrome.dll.pdb

 上面的Matched表示匹配。 

 

 上面的Unmatched表示不匹配,并携带原因。

 

同时都会打印出

二进制文件的时间戳、格式、签名和年龄等信息

pdb的格式类型、签名和年龄等信息

chkmatch.exe的详细资料参考: https://www.debuginfo.com/tools/chkmatch.html

 

  参考资料:

https://www.cnblogs.com/budapeng/p/3795140.html

https://blog.csdn.net/zsc_976529378/article/details/136529769

posted @ 2024-03-11 23:13  一叶知秋,见微知著  阅读(96)  评论(0编辑  收藏  举报