劇集

重組工具 #167 - 偵錯使用者模式損毀傾印 Redux

在重組工具的這一集中,Andrew Richards 和 Chad Beeder 會使用適用於 Windows 的偵錯工具 (WinDbg) 來判斷安德魯電腦上發生的各種應用程式當機的根本原因。 我們使用 Sysinternals ProcDump 來擷取傾印。

偵錯時,我們會在 Windows 檔案總管中設定壓縮和加密檔案的色彩,並使用 Sysinternals 進程監視器來判斷載入 PDE 調試程式擴充功能時調試程式為何收到拒絕存取。

我們在這兩集進行了類似的調查:

我們將討論如何在此情節中安裝適用於 Windows偵錯工具:

http://www.sysinternals.com取得 Sysinternals 工具。 我們使用:

重組工具 OneDrive 取得 PDE 調試程式擴充功能

取得Microsoft公用符號伺服器的符號路徑:

若要在您自己的計算機上收集損毀的傾印,請安裝 ProcDump 作為 Postmortem (AeDebugger) 調試程式:

md c:\dumps
procdump.exe -馬 -i c:\dumps

在任何傾印(使用者或核心)上,您可以執行自動化分析來檢視問題:

!analyze -v

偵錯速查表

  • c0000005 是存取違規 - 使用 .ecxr & k
  • c000027b 是 Stowed 例外狀況 (Store Apps) - 使用 !pde.dse
  • e0434352 是 CLR 例外狀況 - 使用 !sos.pe
  • e0697282 是C++例外狀況 - 使用 .ecxr & k
  • 80000003是斷點 - 使用 !analyze -v
  • 輸入十進位數時,請加上 “0n” 前置詞
  • 輸入十六進位數位時,請加上 「0x」 前置詞 (預設前置詞)

常見的調試程式命令

.exr -1

  • 檢視例外狀況程式代碼和例外狀況參數
  • 看起來像 C0xxxxxx 和 80xxxxxx 的數位是 HRESULTs (錯誤碼)
  • 看起來像 7FFFxxxxxxxx 的數位通常是程式代碼 (組合器) 位址

!位址

  • 顯示地址資訊 - Commited/Reserved/Free、Image/Mapped/Private
  • 用來判斷數位是否為程式代碼或數據。

  • 列出最接近的位址
  • 在位址附近或附近顯示符號
  • 用來判斷數位是否為程式代碼或數據。

.ecxr

  • 將偵錯內容變更為例外狀況的點(而不是位於 Windows 錯誤報告 內容中)

r

  • 檢視目前內容中的緩存器。 (.ecxr 會產生相同的輸出)

k

  • 檢視呼叫堆疊

lmvm

  • 使用遮罩以詳細信息檢視載入的模組
  • 檢視模組的詳細數據,包括資料夾、時間戳、描述、著作權、產品/檔案版本

|(垂直橫條或管道字元)

  • 檢視可執行文件的路徑(例如 c:\windows\notepad.exe)

!ext.error

  • 取得錯誤碼的描述。 最擅長描述系統錯誤碼。

!pde.err

  • 取得錯誤碼的描述。 善於描述 HRESULT (80xxxxxx 和 C0xxxxxx)

!pde.dpx

  • 擷取目前線程的辨識項(符號、結構、字串等)

。格式

  • 以各種格式顯示數位。
  • 如果數字實際上是 ASCII 文字或日期/時間,則輕鬆解決方式

!sos.pe

  • 顯示 CLR 例外狀況。
  • 如果有內部例外狀況,請按兩下連結以檢視它。

.cordll -u & .cordll -l

  • 如果未載入 SOS,請嘗試卸除和載入 CLR 支援。

!peb

  • 檢視進程環境區塊 (模組、命令行、環境變數等)

!teb

  • 檢視目前線程的環境區塊(堆疊範圍、上次錯誤碼、上次狀態代碼等)

!gle

  • 取得最後一個錯誤
  • 顯示目前線程的最後一個錯誤碼和上次狀態代碼

.cls

  • 清除畫面。

。重新載入

  • 強制重載目前堆疊上模組的符號重載(下載)。

.reload /f

  • 強制目前堆疊上模組的完整重載(下載)符號。

市集應用程式

若要檢視目前安裝的市集應用程式及其版本使用:

註冊表編輯器 (regedit.exe)

  • HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package

PowerShell