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