二進位制檔案和符號檔案(PDB)如何校驗是否匹配

一叶知秋,见微知著發表於2024-03-11

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

相關文章