掌握Windows內(nèi)核調(diào)試技術(shù)是學(xué)習(xí)與研究Windows內(nèi)核的基礎(chǔ),調(diào)試Windows內(nèi)核的方式大致分為兩種: (1)通過Windbg工具在Windows系統(tǒng)運行之初連接到Windows內(nèi)核,連接成功之后便可以調(diào)試,此時即可以調(diào)試Windows內(nèi)核啟動過程,又可以在Windows啟動之后調(diào)試某內(nèi)核組件或應(yīng)用程序?;蚴褂肳indbg的Kernel debugging of the local mechine功能,在Windows系統(tǒng)完全啟動之后,調(diào)試Windows內(nèi)核組件或應(yīng)用程序。這種方式需要配置Windows系統(tǒng)以DEBUG模式啟動。 (2)通過Bochs來運行Windows系統(tǒng),可以在Windows運行的任意時刻調(diào)試任意信息,但最大的缺點就是,這種方式目前不支持使用Windows Symbols,與第一種方式相比,匯編代碼讀起來并不直觀。 本文介紹方式(1)即通過Windbg工具調(diào)試Windows內(nèi)核。 1、Windbg工具簡介及獲取方式 Windbg工具是微軟團(tuán)隊開發(fā)和公布的一款專門用于調(diào)試Windows內(nèi)核及應(yīng)用程序的調(diào)試器,既支持內(nèi)核級(Ring0)調(diào)試,也支持應(yīng)用程序級(Ring3)調(diào)試。如今的Windows系統(tǒng)調(diào)試器有多種,出了Windbg以外,還有Olldbg、Immunity Debugger等。Olldbg和Immunity Debugger不支持內(nèi)核級調(diào)試。 Windbg工具包含在Windows Driver Kit(WDK,Windows驅(qū)動開發(fā)包)中,當(dāng)然也可以單獨下載。 (1)如果要通過WDK方式獲取的話,Windows XP及之前的環(huán)境只要下載WDK即可,整個資源大約300M~500M,但是在Windows Vista/Windows 7等系統(tǒng)之后,微軟將WDK與Visual Studio環(huán)境集成到一起,因此整個下載資源大約6.0G~7.0G。由于Windows XP系統(tǒng)不再支持,并且筆者的實驗環(huán)境為Windows 7系統(tǒng),在后續(xù)的文章中也會涉及到Windows驅(qū)動開發(fā),所以筆者建議下載WDK與VS集成包,雖然資源比較大。 (2)如果只是暫時學(xué)習(xí)Windows內(nèi)核調(diào)試的話,可以單獨下載Windbg工具,整個資源大約150M。 以上資源皆可以在MSDN上獲取,獲取鏈接為:http://msdn.microsoft.com/zh-cn/windows/hardware/hh852365.aspx 2、Windows Symbols簡介及獲取方式 Windows Symbols是微軟公開的Windows系統(tǒng)符號表,使用Windbg調(diào)試WIndows內(nèi)核和應(yīng)用程序時可以很直觀地看到部分變量名稱、結(jié)構(gòu)體結(jié)構(gòu)、函數(shù)名稱等。 Windows Symbols可以直接在MSDN上獲取,其獲取頁面與上述給出的獲取Windbg工具的頁面鏈接相同。 但是筆者不建議直接下載并安裝Windows Symbols,因為在使用Windbg工具調(diào)試時,可以根據(jù)需要即時獲取相關(guān)模塊的符號信息(如果網(wǎng)絡(luò)正常的話)。 3、Windows內(nèi)核調(diào)試方法 通過虛擬機調(diào)試Windows系統(tǒng)是種常見的方式,即首先搭建虛擬機環(huán)境,即將Windows系統(tǒng)安裝在虛擬機中,然后配置虛擬機Windows系統(tǒng)的啟動模式為DEBUG模式,并且配置好Windbg工具與虛擬機Windows系統(tǒng)之間的通信通道,在Windbg進(jìn)入等待調(diào)試通信的時候,重啟虛擬機Windows系統(tǒng),雙方的調(diào)試鏈接建立以后,即可使用Windbg工具調(diào)試/控制Windows內(nèi)核,詳細(xì)步驟如下: (1)配置虛擬機Windows系統(tǒng)以DEBUG模式啟動。 進(jìn)入虛擬機Windows系統(tǒng),以管理員身份運行cmd.exe,執(zhí)行以下命令: bcdedit /debug on //啟用Windows內(nèi)核調(diào)試支持 bcdedit /bootdebug on //啟用應(yīng)用程序的啟動過程調(diào)試支持 關(guān)于bcdedit命令的詳細(xì)信息,可以在MSDN中了解:http://msdn.microsoft.com/zh-cn/library/dn653986(v=vs.85).aspx 上述方式僅在Windows Vista/7系統(tǒng)及以后版本的Windows系統(tǒng)中有效,如不做特殊說明,筆者的實驗環(huán)境默認(rèn)為VirtualBox/Windows 7系統(tǒng)。 對于Windows XP系統(tǒng)的配置,請自行GOOGLE。 (2)配置Windbg與虛擬機Windows系統(tǒng)的調(diào)試通信通道。 關(guān)閉虛擬機Windows系統(tǒng),在虛擬機“串口配置”中,啟用某個串口,比如COM1,并將該串口的端口模式設(shè)置為“主機管道”,并選擇“創(chuàng)建通道”,在“端口/文件位置”中輸入待創(chuàng)建的虛擬的管道設(shè)備名稱,比如“\\.\pipe\comdbg”(注意格式,“comdbg”名稱用戶自定義): 打開Windbg,在“Kernel Debug”(Ctrl+K)對話框的“COM”標(biāo)簽頁中將“Port”也配置為“\\.\pipe\comdbg”: 點擊確定后,Windbg進(jìn)入嘗試與目標(biāo)建立通信通道狀態(tài): 此時啟動虛擬機的Windows系統(tǒng),一段時間以后,調(diào)式通信通道建立成功: 此時,在Windbg中按快捷鍵“Ctrl+Break”即可中斷虛擬機Windows的啟動/運行過程(第一次一般會下載符號表,需要耐心等待): 此時便可以輸入各種調(diào)試指令,比如輸入“g”命令就可以繼續(xù)虛擬機Windows的運行過程。 由于Windbg的內(nèi)核調(diào)試指令與Windows內(nèi)核原理相關(guān),所以在后面的Windows內(nèi)核原理分析時會詳細(xì)說明Windbg使用及相關(guān)指令。 |
|