二进制文件和符号文件(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