NetRochtml
Debugging Tools for Windows是微軟發佈的一套用於軟件調試的工具包(後面若是沒有指明,那麼我會使用WinDbg來做爲這一套調試工具的簡稱)。我第一次接觸是在三年前的一個內核驅動項目,因爲進行了IDT中鍵盤鼠標中斷的Hook,使用Softice調試時形成會形成影響,只得使用WinDbg經過串口進行雙機調試。自此以後這個Windows平臺下最爲強大的調試工具一直是開發過程當中的必備。這裏我絕不掩飾的說"最強",可能不少經過逆向工做而接觸調試的朋友不會認同,可是我相信隨着對WinDbg瞭解的加深,以及對這套工具在軟件開發中應用的瞭解,他們也會和我有同樣的觀點。安全
一直以來,軟件調試技術在軟件開發者中都沒有獲得足夠的普及和重視,互聯網上能找到的系統描述的資料也較少。隨着國內軟件行業總體的發展和進步,這些技術慢慢開始獲得推廣。2008年出版的有關調試的數據比以往都要多。我有幸拜讀了Raymond的《軟件調試》,以及熊力的《Windows用戶態程序高效排錯》,獲益良多。 這幾年的工做中也積累了一些關於Windows調試工具的知識,但願可以將這些東西進行一些分享。所以,利用幾個月空閒時間翻譯了WinDbg文檔中上半部調試器配置、使用和命令介紹的內容,同時準備寫一些關於WinDbg調試工具的初級文章。但願可以爲對調試技術感興趣而又苦於沒有資料的朋友提供一些幫助。性能優化
特別感謝個人前同事小喂。雖然他第一條串口線仍是我焊的,可是他對於WinDbg的使用和了解程度很快就超過了我。在至關長時間的共事和討論中,讓我學到了不少。服務器
WinDbg是專門爲Windows NT系列操做系統設計的調試器,最先是做爲Windows NT 3.1的工具發佈的。其後也一直跟隨NT操做系統的發展而不斷髮展完善。若是用一句話來歸納,能夠說WinDbg是爲了軟件開發而存在的調試工具。軟件包中的調試器和小工具的各類功能都是爲了配合軟件的開發而設計的,而且覆蓋到了Windows平臺下各類不一樣類型項目的調試(傳統的SDK或MFC應用程序、.NET平臺應用、COM應用、軟硬件驅動程序等等)。網絡
Windows調試工具包中的調試器包括WinDbg、KD、CDB和NTSD。其中, KD用於內核調試;CDB和NTSD用於用戶態調試,在功能和使用上幾乎徹底一致;WinDbg是內核調試器和用戶態調試器的綜合體,因爲功能完善而且具備圖形界面,因此是最經常使用的工具。它們可以在x8六、Itanium和x64機器上的全部NT平臺操做系統中運行。工具
另外,工具包中還有一些小工具,下面是經常使用的幾個:性能
另外,Application Verifier雖然沒有包含在軟件包中,可是也是一個很是強大的工具。能夠對程序運行時的不少狀態進行監控,以發現一些普通調試難以找到的錯誤。下面是Application Verifier配置界面的一個截圖:優化
Application Verifier能夠在這個頁面下載:http://go.microsoft.com/fwlink/?linkid=108353操作系統
可能不少已經習慣使用SoftICE、OllyDbg、IDE調試器的朋友會提出這樣的疑問:在這麼多調試器中,爲何要選擇WinDbg?它究竟有什麼特色?
設想一下下面幾個場景:
在現實環境中,有不少複雜的調試場景,咱們須要專業級的調試器來解決這些問題。而WinDbg偏偏提供了這種商業軟件環境下的專業級軟件調試功能,它和其餘不少咱們熟知的調試器的區別也在於此。
咱們將WinDbg和其餘調試器分做內核調試器和用戶態調試器兩類來進行比較。
內核調試方面:
WinDbg |
SoftICE |
|
原理 |
Windows操做系統內置調試支持 |
Hook中斷,接管系統 |
系統和平臺支持 |
x8六、Itanium和x64機器上的全部NT平臺操做系統 |
x86,因爲已中止更新,新版本操做系統中支持不佳,老系統中也經常遇到兼容性問題 |
符號和源碼支持 |
完美支持符號調試和源碼調試,可直接使用微軟公共符號 |
支持符號調試和源碼調試,可是須要先轉換符號格式 |
遠程調試 |
經過和遠程工具、轉發器的配合,實現各類靈活的遠程調試方式,以支持不一樣的網絡環境 |
經過Virtual SoftICE支持基於網絡的遠程調試 |
硬件需求 |
經過串口、139四、USB 2.0接口的雙機調試;經過Pipe鏈接的虛擬機調試;或者功能有諸多限制的本地內核調試 |
單機或者經過Virtual SoftICE的雙機調試 |
用戶界面 |
因爲是雙機調試,調試器只是主控機上運行的一個普通軟件。擁有GUI界面,能夠同時進行其餘應用。 |
單機調試時徹底接管系統,字符界面,操做不是很方便。 |
擴展性 |
支持腳本和插件,而且軟件包自己提供了大量很是有用的插件 |
支持插件 |
因爲SoftICE已經中止更新,WinDbg能夠說是如今Windows平臺上惟一好用的進行內核調試的工具,而且隨着新版本的不斷推出,不斷地添加對新版操做系統的支持以及完善功能。強大的符號支持,方便的源碼調試,使得內核級調試可以事半功倍。
用戶態調試方面:
Windows調試工具包 |
OllyDbg |
Visual Studio調試器 |
|
原理 |
Windows的用戶程序調試支持 |
Windows的用戶程序調試支持 |
Windows的用戶程序調試支持 |
系統和平臺支持 |
主要基於NT系統,9x內核下支持不佳而且須要安裝附加模塊 |
主要支持NT系統,9x下也可使用 |
新版本的VisualStudio不支持在9x系統下安裝。VC6以前能夠在9x下調試 |
符號和源碼支持 |
完美支持符號調試和源碼調試,可直接使用微軟公共符號 |
支持符號調試和源碼調試 |
支持。VS2008開始能夠直接使用微軟公共符號 |
遠程調試 |
經過和遠程工具、轉發器的配合,實現各類靈活的遠程調試方式,以支持不一樣的網絡環境 |
不支持 |
較新版本Visual Studio中支持 |
無源碼調試 |
反彙編分析能力較弱,GUI界面偏弱,無源碼時調試比較困難 |
強大的代碼分析能力,無符號和源碼時也能很好的進行調試 |
無源碼調試的支持很弱,使用不便 |
用戶界面 |
GUI界面不是很豐富,大量操做須要經過命令 |
GUI界面強大,可以實現大多數調試操做 |
介於WinDbg和OllyDbg之間。 |
擴展性 |
支持腳本和插件,而且軟件包自己提供了大量很是有用的插件 |
支持腳本和插件,有大量可用的資源 |
支持插件擴展 |
Dump文件調試 |
支持,分析功能強大 |
不支持 |
支持,可是不夠強大 |
.NET調試 |
經過SOS.dll支持,進行高級調試比較方便 |
不能直接支持 |
功能強大易用,絕大多數狀況下都能解決問題 |
因爲WinDbg功能至關複雜,有不少方面並不能一一比較,例如非侵入式調試、經過WinDbg控制CDB和NTSD來調試系統服務、建立和分析Dump文件等等。
整體來講,WinDbg更適合做爲軟件項目開發和維護過程當中的調試工具使用,而OllyDbg更適合逆向工程。
根據我我的對WinDbg的使用經驗來講,它更適合做爲開發維護的輔助工具來使用。
若是要進行用戶態的逆向工程,推薦使用OllyDbg、IDA這些擁有強大彙編程序分析能力的工具。
WinDbg更適用於如下這些場合:
windbg中文文檔:http://www.dbgtech.net/windbghelp/index.html
from:http://www.cnitblog.com/cc682/archive/2008/11/27/51945.aspx