Windows調試工具入門—1

NetRochtml

http://www.DbgTech.net編程

  1. 引子

Debugging Tools for Windows是微軟發佈的一套用於軟件調試的工具包(後面若是沒有指明,那麼我會使用WinDbg來做爲這一套調試工具的簡稱)。我第一次接觸是在三年前的一個內核驅動項目,因爲進行了IDT中鍵盤鼠標中斷的Hook,使用Softice調試時形成會形成影響,只得使用WinDbg經過串口進行雙機調試。自此以後這個Windows平臺下最爲強大的調試工具一直是開發過程當中的必備。這裏我絕不掩飾的說"最強",可能不少經過逆向工做而接觸調試的朋友不會認同,可是我相信隨着對WinDbg瞭解的加深,以及對這套工具在軟件開發中應用的瞭解,他們也會和我有同樣的觀點。安全

一直以來,軟件調試技術在軟件開發者中都沒有獲得足夠的普及和重視,互聯網上能找到的系統描述的資料也較少。隨着國內軟件行業總體的發展和進步,這些技術慢慢開始獲得推廣。2008年出版的有關調試的數據比以往都要多。我有幸拜讀了Raymond的《軟件調試》,以及熊力的《Windows用戶態程序高效排錯》,獲益良多。 這幾年的工做中也積累了一些關於Windows調試工具的知識,但願可以將這些東西進行一些分享。所以,利用幾個月空閒時間翻譯了WinDbg文檔中上半部調試器配置、使用和命令介紹的內容,同時準備寫一些關於WinDbg調試工具的初級文章。但願可以爲對調試技術感興趣而又苦於沒有資料的朋友提供一些幫助。性能優化

特別感謝個人前同事小喂。雖然他第一條串口線仍是我焊的,可是他對於WinDbg的使用和了解程度很快就超過了我。在至關長時間的共事和討論中,讓我學到了不少。服務器

  1. Windows調試工具的簡介和組成

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平臺操做系統中運行。工具

另外,工具包中還有一些小工具,下面是經常使用的幾個:性能

  • KDbgCtrl:用於控制和配置內核調試的一些參數。例如是否只有當發生異常時纔會啓用內核調試、設置DbgPrint緩衝區大小、如何處理用戶模式異常等等。
  • ADPlus:這是一個VB腳本,能夠爲一個或多個進程自動建立內存dump。
  • SymStore:用於建立符號存儲。當須要建立本身的符號存儲時就要用到它了。
  • SymProxy:用於在網絡中建立單獨的HTTP符號服務器,以供全部調試器使用。該工具特別適合企業級應用的環境,能夠將多個符號存儲經過單一的接入點提供使用。
  • DbgSrv、KdSrv、Remote.exe:用於遠程調試。
  • GFlags:用於編輯Global Flags。
  • UMDH:用於對用戶模式堆分配的狀況進行轉儲和分析。
  • USBView:這是WinDbg 6.10.3版本才加入到軟件包中的工具,能夠查看當前鏈接到系統中的USB設備信息。

另外,Application Verifier雖然沒有包含在軟件包中,可是也是一個很是強大的工具。能夠對程序運行時的不少狀態進行監控,以發現一些普通調試難以找到的錯誤。下面是Application Verifier配置界面的一個截圖:優化

Application Verifier能夠在這個頁面下載:http://go.microsoft.com/fwlink/?linkid=108353操作系統

  1. Windows調試器和其餘熟知的調試器比較

可能不少已經習慣使用SoftICE、OllyDbg、IDE調試器的朋友會提出這樣的疑問:在這麼多調試器中,爲何要選擇WinDbg?它究竟有什麼特色?

設想一下下面幾個場景:

  • 公司的軟件針對企業級用戶,該客戶在地球另外一半的美國。有一天客戶抱怨了一個BUG,可是從抓取的dump又沒辦法看出個因此然,想進行動態調試查找緣由。公司預算有限,不能讓你過去出差順便旅遊、對方公司有防火牆,不容許外部鏈接,等等等等。。。怎麼辦?
  • 項目規模很大,涉及到的模塊多,版本也多,而且是由不一樣部門開發的。這些部門可能遍及五湖四海。如何在調試其中某個模塊時,可以快速得到它的符號和源文件,而不用每次都從一大堆不一樣版本的文件中辛苦找尋?調試到某個階段,忽然發現這不是本身的模塊出現問題,如何快速知道這個問題應該找誰解決?項目某些重要模塊有保密須要,如何控制調試人員訪問符號和源文件的權限?
  • 驅動程序怎麼才能源碼調試?SoftICE不支持新系統,我要在Vista上調試怎麼辦?
  • 軟件中包含一個Windows服務組件,可是每次尚未登錄到桌面以前就崩潰了,怎麼進行動態調試?
  • 我想調試Explorer,調試IE,調試CSRSS,調試……,可是調試器一附加上去,系統就會出問題。怎麼辦?
  • 公司發佈的軟件,有用戶反饋和XXX安全軟件衝突總是形成系統崩潰,可是搭建環境以後卻又沒有辦法重現;對方是個普通用戶,鼠標都抓得不太穩。用戶很火大,鬧着要抓個老虎到公司來找你上司作俯臥撐,後果很嚴重,怎麼辦?

在現實環境中,有不少複雜的調試場景,咱們須要專業級的調試器來解決這些問題。而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更適合逆向工程。

  1. 什麼時候使用Windows調試工具

 

根據我我的對WinDbg的使用經驗來講,它更適合做爲開發維護的輔助工具來使用。

若是要進行用戶態的逆向工程,推薦使用OllyDbg、IDA這些擁有強大彙編程序分析能力的工具。

WinDbg更適用於如下這些場合:

  • 商業軟件的Debug和客戶支持

 

  • 內核驅動的調試,以及對驅動進行逆向工程時進行動態調試
  • 研究Windows自己的內核或者軟件
  • 疑難BUG的調試,如死鎖、COM調用、資源泄露、堆棧或者堆溢出
  • 以性能優化爲目的的調試
  • 對調試目標基本不形成影響的非侵入式調試

 

windbg中文文檔:http://www.dbgtech.net/windbghelp/index.html

from:http://www.cnitblog.com/cc682/archive/2008/11/27/51945.aspx

相關文章
相關標籤/搜索