<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    Windows調試工具入門―1

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    NetRoc

    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是內核調試器和用戶態調試器的綜合體,由于功能完善并且具有圖形界面,所以是最常用的工具。它們能夠在x86、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配置界面的一個截圖:

    RFID設備管理軟件

    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中斷,接管系統

    系統和平臺支持

    x86、Itanium和x64機器上的所有NT平臺操作系統

    x86,由于已停止更新,新版本操作系統中支持不佳,老系統中也常常遇到兼容性問題

    符號和源碼支持

    完美支持符號調試和源碼調試,可直接使用微軟公共符號

    支持符號調試和源碼調試,但是需要先轉換符號格式

    遠程調試

    通過和遠程工具、轉發器的配合,實現各種靈活的遠程調試方式,以支持不同的網絡環境

    通過Virtual SoftICE支持基于網絡的遠程調試

    硬件需求

    通過串口、1394、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

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全