簡體   English   中英

如何將 memdump 的校驗和與源文件進行比較

[英]How do I compare the checksum of a memdump to the source file

在調試 memory 轉儲時,Windbg 顯然會在某處讀取校驗和,因為如果沒有提供(未與 /RELEASE 標志鏈接),它會抱怨。 但它似乎並沒有真正比較它們。 我嘗試刪除 function 並重建,但沒有顯示錯誤。 Windbg/中是否有一些 API function 來獲取存儲的校驗和或實際比較它們?

PDB 文件包含

  • 有關源代碼的信息,例如文件名和行號
  • 校驗和
  • 時間戳

PE 文件(DLL、EXE)包含

  • 構建時所在的 PDB 的路徑
  • 時間戳
  • 校驗和

源文件包含

  • 源代碼
  • 沒有時間戳
  • 沒有校驗和

所以WinDbg可以判斷DLL和PDB是否匹配在一起。 它無法確定您擁有的源文件是否實際上是用於構建 EXE、DLL 或 PDB 的源文件。

順便說一句:這也是您不能簡單地為您過去創建的 DLL 重建 PDB 的原因。

  1. 編譯器和 linker 可能會產生不同的結果
  2. 即使它們產生相同的結果,時間戳也會不同,並且(取決於時間戳是否包含在校驗和中)校驗和也會不同

如何將 memdump 的校驗和與源文件進行比較

好吧,你不這樣做是因為你不能。

Windbg/中是否有一些 API function 來獲取存儲的校驗和或實際比較它們?

您可以從 PDB 獲取校驗和,但無法將其與源進行比較。 您只能將其與 DLL 或 EXE 進行比較。

您還可以使用.symopt+ 0x40 (MSDN)關閉 WinDbg 中的檢查,即 SYMOPT_LOAD_ANYTHING。 但是,您可能會得到錯誤的 function 名稱、錯誤的變量名稱、錯誤的行號等。

有一些工具可以使 DLL 和 PDB 匹配。 但是,不要那樣做 您將忘記它,並且您將永遠不會再收到有關不匹配的通知。 你會得到錯誤的結果,你會很困惑,甚至得出錯誤的結論。 這會導致大量時間浪費。 它發生在我身上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM