劇集
重組工具 #167 - 偵錯使用者模式損毀傾印 Redux
在重組工具的這一集中,Andrew Richards 和 Chad Beeder 會使用適用於 Windows 的偵錯工具 (WinDbg) 來判斷安德魯電腦上發生的各種應用程式當機的根本原因。 我們使用 Sysinternals ProcDump 來擷取傾印。
偵錯時,我們會在 Windows 檔案總管中設定壓縮和加密檔案的色彩,並使用 Sysinternals 進程監視器來判斷載入 PDE 調試程式擴充功能時調試程式為何收到拒絕存取。
我們在這兩集進行了類似的調查:
我們將討論如何在此情節中安裝適用於 Windows 的偵錯工具:
從 http://www.sysinternals.com取得 Sysinternals 工具。 我們使用:
從重組工具 OneDrive 取得 PDE 調試程式擴充功能
取得Microsoft公用符號伺服器的符號路徑:
- 透過環境變數
setx /m _NT_SYMBOL_PATH SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols - 在調試程式中
.sympath SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols
若要在您自己的計算機上收集損毀的傾印,請安裝 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
在重組工具的這一集中,Andrew Richards 和 Chad Beeder 會使用適用於 Windows 的偵錯工具 (WinDbg) 來判斷安德魯電腦上發生的各種應用程式當機的根本原因。 我們使用 Sysinternals ProcDump 來擷取傾印。
偵錯時,我們會在 Windows 檔案總管中設定壓縮和加密檔案的色彩,並使用 Sysinternals 進程監視器來判斷載入 PDE 調試程式擴充功能時調試程式為何收到拒絕存取。
我們在這兩集進行了類似的調查:
我們將討論如何在此情節中安裝適用於 Windows 的偵錯工具:
從 http://www.sysinternals.com取得 Sysinternals 工具。 我們使用:
從重組工具 OneDrive 取得 PDE 調試程式擴充功能
取得Microsoft公用符號伺服器的符號路徑:
- 透過環境變數
setx /m _NT_SYMBOL_PATH SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols - 在調試程式中
.sympath SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols
若要在您自己的計算機上收集損毀的傾印,請安裝 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
有任何意見嗎? 請在此提交問題。