一、Windbg
Windbg是微軟開發的一套調試器中的組件。WinDBG屬於內核級別調試器,不僅可以用來調試應用程序,也可以調試內核級的代碼,如驅動程序。Windbg由於其豐富的命令和對Windows的原生支持還有其易用性,是其他其他調試器望塵莫及的。如果安裝了Windows SDK,一般會帶有windbg.exe,gflags.exe和appverif.exe,安裝路徑是:
Windows SDK v8.1
C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\windbg.exe
C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\windbg.exe
Windows SDK v10
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe
C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\windbg.exe
注意,32位程序請使用32位windbg調試,64位程序用64位windbg調試。
gflags.exe和windbg.exe在同一個安裝路徑
WinDbg Preview
C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2001.2001.0_neutral__8wekyb3d8bbwe\DbgX.Shell.exe
AppVerifier
C:\Windows\System32\appverif.exe
C:\Windows\SysWOW64\appverif.exe
★WinDBG官網:
http://www.windbg.org/ windbg
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/ windbg
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugging-using-windbg-preview WinDbg Preview 新版本,僅適用於Win10
https://www.microsoft.com/en-us/download/details.aspx?id=20028 AppVerifier
http://windbg.info/doc/1-common-cmds.html
如果 Windows SDK 已安裝,但是沒有windbg,請打開 "設置",導航到 "應用" & 功能",選擇" Windows 軟件開發工具包",然后單擊"修改"以更改安裝以添加Windows 調試工具.
我們用AppVerifier主要是為了打開頁堆(page heap)調試功能,你也可以用系統工具 gflags.exe 來做同樣的事。
打開gflags,菜單Image File,Image填exe名字,不要全路徑,選上Create user mode stack trace database;
或者使用命令行,達到同樣效果:
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64>gflags.exe -i SmartDispenser.exe +ust
★Windbg特色功能:
1. 支持應用層程序調試(可以源碼調試)
2. 支持內核層調試。如調試驅動和操作系統
3. 支持遠程調試
4. 分析dump文件
5. 查看本地操作系統信息
6. 豐富的命令(可以看到你用其他工具看不到的信息)
不足:
1. 界面不是太友好
與vc調試器比較:源碼調試器首選vc
與ollydbg比較:無源碼應用層程序調試首選ollydbg
★遠程調試應用程序
准備:
1. 遠程機安裝windbg
2. 本地安裝windbg
遠程機使用TCP鏈接設置:
設置windbg啟動命令行:windbg.exe -server tcp:port=123456 (123456是端口號,這個可以隨意設置)
然后通過命令行的方式啟動,附加或啟動一個需要調試的進程
本地機設置:
設置windbg啟動命令行:windbg.exe -remote tcp:server=172.168.1.3,port=123456 (172.168.1.3是遠程機器IP, 123456是端口號,一定要與遠程機一致),然后通過命令行的方式啟動
★姊妹篇
《Qt Creator的CDB調試器--使用技巧與心得,重點是Symbols Path設置》
《VC++內存泄漏檢測方法(5):使用強大的Windbg工具,重點是Symbols Path設置》
★書籍推薦
張銀奎,高端調試 http://advdbg.org/
張銀奎《軟件調試》
張銀奎《軟件調試(第二版)》
熊力,https://www.cnblogs.com/lixiong/,https://www.cnblogs.com/lixiong/archive/2010/02/11/1667516.html
熊力《Windows用戶態程序高效排錯》
熊力《Windows用戶態程序高效排錯》勘誤和補充
赫瓦特 (美) 《Windows高級調試》
★博文推薦
二、OllyDbg(簡稱OD)
OllyDbg是用戶態調試器,具有一定的智能分析能力,但與IDA(智能反匯編分析器)的分析能力相比,不是一個量級的。但它的調試器功能非常完善。所以通常用IDA來閱讀代碼,而用Olly來動態跟蹤程序。
OllyDbg:3級調試工具,與當年的TRW2000(RING 0級調試工具)齊名,用的人很多。上手容易,教程如牛毛。只能用來搞32位程序,作者已不再更新。
x64dbg:新型的調試工具32位/64位都能搞,相對bug多,教程少;但是越來用的人越多。周更新。
WinDbg:一般調試微軟內存/藍屏工具,一般人玩不動。
IDA:可動態、靜態、流程圖式分析與調試,占用資源也最多。
https://www.52pojie.cn/thread-350397-1-1.html 52pj-Ollydbg
三、x64dbg
x64dbg是Windows下的32/64位調試器,開源。x64dbg采用 QT 平台編寫,支持多國語言。熟悉OllyDbg的用戶應該很容易上手。x64dbg整體前景比較樂觀,功能有待加強,但界面簡潔明晰、操作方便快捷,設計人性化等。通過這款調試工具用戶可以分析64位的應用,這是OllyDbg所不能做到的,它只能分析32位應用,所以想要分析64位應用,你可以使用小編帶來的這款調試工具,是一款專門用於分析64位應用的調試軟件。支持類似C的表達式解析器、全功能的DLL和EXE文件調試、IDA般的側邊欄與跳躍箭頭、動態識別模塊和串、快反匯編、可調試的腳本語言自動化等多項實用分析功能,可以幫助你完成64位應用的分析。
https://github.com/x64dbg/x64dbg
https://www.52pojie.cn/thread-1094207-1-1.html
https://www.lanzous.com/i8mzfrc 原版+插件下載,52pj
x.微軟符號文件
http://msdl.microsoft.com/download/symbols
1、下載方法
方法1: 使用vs進行下載,當然必須是vs2003以后的版本,通過attach到一個進程中或者啟動一個程序進行調試。
方法2: 使用Windbg進行下載,同樣是attach或run一個程序,Ctrl+S設置一下符號路徑,然后使用命令.reload
2、設置調試器Symbols路徑
WinDBG、VC.Net及以上版本都可以通過設置環境變量指定Symbols路徑,並都能根據環境變量設置自動去微軟服務器拉取window系統symbols。
右鍵我的電腦—〉“屬性”—〉“高級系統設置”—〉“高級”—〉“環境變量”—〉“系統變量”,新建兩個環境變量:
_NT_SYMBOL_PATH和_NT_ALT_SYMBOL_PATH
-
_NT_SYMBOL_PATH=C:\Symbols;srv*C:\Symbols*http://msdl.microsoft.com/download/symbols
-
_NT_ALT_SYMBOL_PATH=cache*C:\Symbols
-
_NT_SYMBOL_PROXY=127.0.0.1:8100
這樣設置后,調試器首先會到_NT_ALT_SYMBOL_PATH指定的共享路徑中去尋找pdb文件,並把找到的文件緩存到C:\Symbols目錄下,下次訪問時就不用到共享目錄中查找,這樣可以提高速度。當在_NT_ALT_SYMBOL_PATH中找不到時會查看路徑_NT_SYMBOL_PATH,接着自動從微軟官方網站下載windows系統的pdb文件,並緩存到共享目錄C:\Symbols中,緩存的好處是下次直接從共享目錄拉取,不用再跳到微軟網站拉取。
注意:設置以上變量后第一次使用Windbg或者VS調試時,因為要下載windows系統的pdb文件,可能要等待一段時間(Windbg會在命令行窗口右下角顯示“BUSY”狀態,但也有可能不顯示狀態,VS在狀態欄會顯示Loading symbols for XXX),並且pdb文件都相對比較大,視網速快慢,可能要等待十幾分鍾到幾個小時。另外在測試中發現,WinDbg下載symbols的速度比VS快得多。