Windows除錯工具入門 1

2021-09-08 01:12:20 字數 3708 閱讀 4976

netroc

debugging tools for windows是微軟發布的一套用於軟體除錯的工具包(後面如果沒有指明,那麼我會使用windbg來作為這一套除錯工具的簡稱)。我第一次接觸是在三年前的乙個核心驅動專案,由於進行了idt中鍵盤滑鼠中斷的hook,使用softice除錯時造成會造成影響,只得使用windbg通過串列埠進行雙機除錯。自此之後這個windows平台下最為強大的除錯工具一直是開發過程中的必備。這裡我毫不掩飾的說"最強",可能很多通過逆向工作而接觸除錯的朋友不會認同,但是我相信隨著對windbg了解的加深,以及對這套工具在軟體開發中應用的了解,他們也會和我有一樣的觀點。

一直以來,軟體除錯技術在軟體開發者中都沒有得到足夠的普及和重視,網際網路上能找到的系統描述的資料也較少。隨著國內軟體行業整體的發展和進步,這些技術慢慢開始得到推廣。2023年出版的有關除錯的資料比以往都要多。我有幸拜讀了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是核心偵錯程式和使用者態偵錯程式的綜合體,由於功能完善並且具有圖形介面,所以是最常用的工具。它們能夠在x86、itanium和x64機器上的所有nt平台作業系統中執行。

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

可能很多已經習慣使用softice、ollydbg、ide偵錯程式的朋友會提出這樣的疑問:在這麼多偵錯程式中,為什麼要選擇windbg?它究竟有什麼特點?

設想一下下面幾個場景:

在現實環境中,有很多複雜的除錯場景,我們需要專業級的偵錯程式來解決這些問題。而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更適合逆向工程。

根據我個人對windbg的使用經驗來說,它更適合作為開發維護的輔助工具來使用。

如果要進行使用者態的逆向工程,推薦使用ollydbg、ida這些擁有強大匯程式設計序分析能力的工具。

windbg更適用於以下這些場合:

windbg中文文件:

from:

除錯工具 之Python除錯工具pycharm

1 pycharm的安裝 pycharm是一款非常好用的python ide,提供專業版和社群版,就像eclipse和myeclipse一樣,專業版是收費的,而社群版是免費的但功能就沒有專業版的功能強大。1.2 安裝 這裡就不必細說,直接next就ok ps 安裝完成後一定要執行 1.3 破解 採用...

Linux基礎入門 GDB除錯工具

gnu的偵錯程式稱為gdb,該除錯工具是乙個互動式工具,在字元模式下工作。gdb作為功能強大的除錯工具,可完成如下的除錯任務。1 設定斷點 2 監視程式變數的值 3 程式的單步執行 4 修改變數的值 為了使用gdb除錯工具,在編譯原始檔時必須使用 g選項 即gcc c g c 加上除錯資訊。另外使用...

windows客戶端開發除錯工具

1.windows常用開發與除錯工具 1.1 sysinternals 核心大神打造,含大量windows系統工具,windows開發必備神器,大神被ms招安。procmon.exe 監視程式執行過程中的動作,可用於效能監控。procexp.exe 相當於公升級版的任務管理器,可以檢視載入模組,模組...