想起自己的windbg配置就轉載:eqera的windows內核調試配置,真的是獲益良多希望他不會介意我轉載他的博客,幫了我很多,記錄下來給我也給大家,
其中我主要看的是VMWare的pipe建立,而我有些分享是在vs2015中打上DDK,然后在開始菜單window kits下找見windbgx86或者是你想要用的類型,然后
發送快捷方式到桌面利於以后用。發到桌面后,在屬性插入你放置的的符號的路徑,讓然最后別忘了在windbg檢查路徑是否正確。
eqera他的解述給了我很多幫助,可以耐心解讀。下次我會寫一些我對於調試的東西,如果對於不明白的路徑設置,可以給我留言,我告訴你。
Windbg本地調試工具是驅動級調試工具,在Win10系統中調試過程涉及系統驅動,所以用WinDbg是最佳選擇。一般情況下,驅動調試需要兩台電腦進行配合
一台電腦作為主導進行驅動調試,另一台電腦作為目標機進行驅動安裝。
內核調試主要用來調試驅動代碼、分析內核結構等。 WinDbg通過兩台電腦可以實現內核調試,其中一台電腦運
行WinDbg,被稱為主機;另外一台電腦運行被調試的程序或系統,被稱為目標機。一般情況下兩台電腦都是真實機
器,這樣調試最符合實際情況,兩台電腦通過串口線、 1394線或USB對聯線連接起來實現雙機內核調試。如果沒 有
兩台電腦,也可以用虛擬機來模擬目標機,主機上運行WinDbg ,虛擬機中安裝Windows運行被調試的程序,虛擬
機通過模擬的串口輸出為主機上的一個命名管道,從而和主機上的WinDbg連接起來實現雙機 內核調試。
除雙機內核調試外, WindowsXP后還引入了一種本機內核調試方式,只需要一台電腦,直接運行WinDbg就 能
查看修改系統內核結構等,不過所有和中斷目標機系統相關的命令都不能執行,如斷點命令。
如果采用虛擬機模擬目標機,調試響應速度有時候是個問題,比1394線連接的真實雙機調試速度要慢不少,特
別是執行操作大量內存的命令時(如搜索內存命令),感覺非常明星。所以針對這種情況還會介紹一個特殊的輔助調 試
工具vmkd ,該工具可以大大加速內核調試的速度,為咱們帶來不少方便。
下面分節詳細介紹各種內核調試情景下的配置,盡量每個步驟都截圖說明。
真實機雙機內核調試
真實機之間的內核調試首先需要准備連接線,可以用串口線、 1394線或者USB對聯線。
串口線速度太慢,而且電腦城一般買不到可以直接使用的串口線,需要把線和接頭買回來自己焊,按照WinDbg
幫助中的說明交叉焊接,就能得到一根可用來調試的串口線。用串口線把兩台電腦連接上后,先用Windows自帶的
超級終端工具,選擇好串口和波特率連接。如果在超級終端中按鍵能在另外一台電腦的超級終端上顯示按鍵,則表示
串口線連接成功。接下來就可以用WinDbg連接串口調試。某些筆記本上可能沒有串口,可以買一個USB轉串口的
接頭,然后設置USB轉換后的串口號,就能把這台筆記本當作主機使用。
1394線速度快,價格也便宜,如果電腦上沒有1394口,可以再另外買一個1394卡,價格也很便宜。 1394分
大口和小口,只需按照電腦上的接口大小購買合適的線就行。如果沒有1394口,裝一個1394卡又很麻煩,則也可
以買一個USB轉1394口的接頭,不過一樣只能當作主機使用。
USB對聯線是Vista系統以后支持的內核調試連接方式,沒見到哪里能買到這樣的線,估計速度會更快一點吧!
因為1394線連接調試最方便,速度也比較快,所以建議使用這種方式。
電腦、連接線等准備好后,先設置目標機系統,啟用內嵌在系統中的內核調試引擎。 Vista之前的系統,用記事 本
打開系統盤根目錄下的boot.ini文件,添加新的啟動項,在新的啟動項上添加調試選項。如下表,紅色行表示新加的
啟動項, /debug表示打開內核調試引擎, /debugport=1394表示采用1394連接方式, /channel=10表示設置 通
道號為10。
- [bootloader]
- timeout=30
- default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
- [operatingsystems]
- multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="MicrosoftWindowsXPProfessional"
- /noexecute=optin/fastdetect
- multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="WINXP-Debug"/noexecute=optin/debug
- /debugport=1394/channel=10
Vista之后的系統需要修改BCD數據庫,利用bcdedit工具添加啟動項,設置調試選項。如下表,以管理員方 式
運行命令行程序,先復制當前項生成新的啟動項,然后在新的啟動項上操作,打開內核調試、設置調試連接方式、設
置1394通道號。
- C:\>bcdedit/copy{default}/d"Vista-RemoteDebug"
- 已將該項成功復制到{13fbbedc-756a-11dc-aed8-0016e68bceb3} 。
- C:\>bcdedit/set{13fbbedc-756a-11dc-aed8-0016e68bceb3}debugtype1394
- 操作成功完成。
- C:\>bcdedit/set{13fbbedc-756a-11dc-aed8-0016e68bceb3}channel10
- 操作成功完成。
- C:\>bcdedit/debug{13fbbedc-756a-11dc-aed8-0016e68bceb3}on
- 操作成功完成
設置完目標系統后重啟,在選擇啟動菜單時停下來,在主機上通過如下命令行運行WinDbg准備連接到目標機
- D:\WinDbg>windbg-d-k1394:channel=10
-d表示在連接上目標系統后馬上中斷下來,這個也是最早的斷點,該選項主要是為了在目標系統初始化早期就斷下 來
查看系統狀態,當前情況下可以不要,1394:channel=10表示連接方式和通道號。第一次采用1394內核調試時,
WinDbg可能會顯示啟動驅動失敗,再次運行WinDbg應該就好了。運行WinDbg后,顯示如下界面:

表示WinDbg已經准備好,正在等待1394連接。然后返回目標機,選擇前面添加的啟動項(也就是打開了內核調 試
選項的啟動項),如下圖,真實機器無法截圖,這里用虛擬機截圖代替。

選擇該啟動項后,系統就會加載內核,初始化內核調試引擎,不一會(幾秒鍾)就能在主機的WinDbg上看到輸出信
息,接着中斷在WinDbg中,如下圖(寫這篇文章時還是用的虛擬機截圖,呵呵):

可以看到WinDbg顯示已經連接到WindowsXP系統上,並顯示了符號路徑、內核基址等信息,然后中斷下來得到 控
制權,輸入k命令可以看到當前調用棧,輸入g命令讓目標系統繼續啟動。開始調試后,在WinDbg中可以隨時按
Ctrl+Break組合鍵或通過工具欄
按鈕中斷目標系統。
如果前面運行WinDbg時不習慣命令行方式,也可以先打開WinDbg ,然后選擇菜單File/KernelDebug打開
內核調試連接對話框,切換到第二個 “ 1394” 選項卡,在channel下面的編輯框中輸入通道號10,點擊 “ 確定 ” 按
鈕開始連接目標機。

這樣和前面命令行運行WinDbg的效果一樣,就是沒了 -d選項,可以在等待連接的界面上按兩次Ctrl+Alt+k組合 鍵
達到相同的效果

真實機采用1394調試時,如果目標機系統是Windows2003 (未安裝ServicePack )或者WindowsXPSP 1,
則連接調試前,需要先在目標機上的 “ 設備管理器” 中禁用1394控制器。如果目標機上是Vista、 Windows2003SP1
或者WindowsXPSP2等系統之后的系統,則不要禁用1394控制器。另外,如果主機是Vista之前的系統,用1 394
調試時連接有問題,則可以嘗試在主機的 “ 設備管理器” 中禁用1394網絡適配器。
虛擬機雙機內核調試
真實機畢竟硬件成本高,需要兩台電腦,還得買連接線。如果調試要求不高,很多情況下可以用虛擬機模擬目標
機,實現雙機內核調試。當前常用的虛擬機有兩種: VMWare和VirtualPC ,都提供了免費版本,運行速度相當於主
機的一半左右。估計現在大家都是雙核的電腦,運行虛擬機還是沒問題的。 VMWare似乎速度要快一點點,而且提 供
的快照功能非常方便,可以隨時把系統還原到以前保存的狀態。 VirtualPC似乎兼容性要好一點,有時候在VMWare
上安裝系統藍屏,用VirtualPC就沒問題。
首先也是選擇連接方式,用虛擬機只有一種串口方式,通過虛擬機模擬的串口輸出到主機上的命名管道,然后
WinDbg連接這個命名管道,從而實現主機和虛擬機的連接。
在虛擬機中安裝好系統后,關閉虛擬機系統,打開虛擬機系統的設置框, VMWare中如下圖:

選擇Editvirtualmachinesettings ,打開設置對話框:

首先選擇Add... 按鈕添加Serial設備,然后按照上圖設置Serial屬性。命名管道名稱為WinDbg連接時需要用到的
管道名, \\.\pipe\前綴不可少,后面接一個容易理解的名稱即可。
VirtualPC虛擬機也差不多,先安裝好系統,選擇系統,點擊Settings按鈕:

打開虛擬機系統設置對話框,選擇左邊的COM1項,在右邊設置輸出的命名管道名稱。

設置好硬件連接方式后(這里是虛擬硬件),啟動虛擬機中的系統,添加調試啟動項。因為虛擬機只是虛擬了串 口,
所以設置系統啟動項時只能使用串口方式。 Vista之前的系統通過修改boot.ini文件實現,如下表。紅色項表示新添
加的啟動項, /debug表示打開內核調試引擎, /debugport=com1表示采用串口1通信, /baudrate=115200設
置串口1的波特率為115200 。
- [bootloader]
- timeout=30
- default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
- [operatingsystems]
- multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="MicrosoftWindowsXPProfessional"
- /noexecute=optin/fastdetect
- multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="WINXP-Debug"/noexecute=optin/debug
- /debugport=com1/baudrate=115200
Vista之后的系統,以管理員權限打開命令行窗口,通過bcdedit工具修改BCD數據添加啟動項。
- C:\>bcdedit/copy{default}/d"Vista-RemoteDebug-1394"
- 已將該項成功復制到{13fbbedc-756a-11dc-aed8-0016e68bceb3} 。
- C:\>bcdedit/set{13fbbedc-756a-11dc-aed8-0016e68bceb3}debugtypeSERIALDEBUGPORT:1
- BAUDRATE:115200
- 操作成功完成。
- C:\>bcdedit/debug{13fbbedc-756a-11dc-aed8-0016e68bceb3}on
- 操作成功完成
設置好啟動項后,重啟虛擬機中的系統,在選擇啟動菜單項時停下來,返回主機,通過命令行啟動WinDbg。
- D:\WinDbg>windbg-d-kcom:pipe,port= \\.\pipe\vmdbg_winxpen,baud=115200
注意紅色字表示的管道名稱,需要和虛擬機中的設置一樣。這里照樣可以通過菜單打開內核調試連接對話框來操作。

注意管道名稱要一致,選中Pipe項,然后確定,WinDbg則會開始等待連接。

此時返回虛擬機中選擇調試啟動項,一會就能看到WinDbg中顯示連接上虛擬機的信息

建立連接后,就和調試真實機一樣,操作也一樣。只有當調試某些和特殊硬件相關的驅動,或者調試和3D游戲
相關的程序時,還是得用到真實機。另外,運行虛擬機畢竟影響主機速度,特別是讀取硬盤時感覺比較明顯。而且當
WinDbg中斷下目標系統后,虛擬機基本上就把CPU給占滿了,雙核時還好,單核時搞的主機都沒辦法動。當然調試
速度也是個問題,照理說都是一台電腦(虛擬機也還是運行在主機上),傳輸速度應該很快。但因為串口是完全模擬 的,
串口設計決定了速度不可能快,所以下面介紹一個用於虛擬機調試時的加速工具: vmkd 。
Vmkd是內核調試高手Skywing推出的一個工具,主要用於加快VMWare內核調試的速度,官方網站在:
http://www.nynaeve.net/?page_id=168 。 vmkd相當於接管了內核調試引擎傳輸通道,以前是:虛擬機系統內
核 <->模擬串口 <->命名管道 <->WinDbg,使用vmkd后變成:虛擬機系統內核<->vmkd內核模塊kdvmware <->vmkd注入模塊vmxpatch<->新的命名管道 <->WinDbg,因為不走虛擬機的模擬串口傳輸數據,而是虛擬機端
的kdvmware和主機端的vmxpath直接復制內存,所以傳輸速度大大加快。
詳細使用步驟如下:
1.在虛擬機中安裝好系統,並按照前一節所述設置好串口調試。
2.把vmkd帶的kdvmware.sys復制到虛擬機中C:\WINDOWS\system32\drivers目錄下,在虛擬機中使
用 命 令 行sccreatekdvmwarestart=demandtype=kernelbinPath=
c:\windows\system32\drivers\kdvmware.sysDisplayName=kdvmware安裝驅動。

3.重新啟動虛擬機中的系統,選擇調試啟動項進系統。
4.在主機上找到啟動虛擬機的vmware-vmx.exe進程的pid ,利用vmxinject.exepid命令把vmxpatch. dll
注入到vmware-vmx.exe進程
- D:\DbgTools\vmkd>tlist-mvmware-vmx.exe
- D:\ProgramFiles\VMware\VMwareServer\bin\vmware-vmx.exe-6096vmware-vmx.exe
- OleMainThreadWndName
- D:\DbgTools\vmkd>vmxinject6096
- OK
5.在虛擬機中通過netstartkdvmware命令啟動驅動。

6.在主機上啟動WinDbg連接虛擬機中的系統開始調試,命名管道名稱中的winxpen是虛擬機系統的安裝文
件夾(比如: d:\VMs\winxpen )。
- windbg-kcom:pipe,port=\\.\pipe\kdvmware_winxpen,baud=115200
命名管道名稱如果不確定,可用WinObjEx工具查看系統中的所有命名管道名,如下圖,最下面的就是vm kd
使用的管道名。

連接后如下圖:
此時再調試會發現單步速度非常快,運行一下搜索命令s就能感覺出來,甚至.dump命令也很快能執行完。
本機內核調試
本機內核調試是WindowsXP之后的系統引入的一種內核調試方式,說調試其實有點不准確,因為沒有單步、 斷
點等調試必備的功能,只能讀寫內存。不過用來查看系統內核信息時還是非常方便的,不需要兩台電腦(連虛擬機也
不需要,完全在本機運行),能夠利用大部分WinDbg自帶的擴展命令,在XP以后的系統上都能使用,包括32/64
系統。
在Windows2003SP1之前的系統上,系統通過ntdll!ZwSystemDebugControl函數提供本機內核調試支 持。
之后的系統通過WinDbg自帶的kldbgdrv.sys驅動調用nt!KdSystemDebugControl函數提供本機內核調試支持 。
官方文檔建議在啟動項中添加 /Debug選項啟動系統,然后使用本機內核調試功能。但一般情況下不需要這么做, Vista
之前的系統上,可以直接運行WinDbg打開本機內核調試;Vista及之后的32位系統,可以利用筆者寫的一個小工
具VistaLKD開啟本機內核調試功能,再運行WinDbg打開本機內核調試;Vista及之后的64位系統暫時只能修改
啟動項添加 /Debug選項來開啟本機內核調試功能。
啟動本機內核調試非常簡單,加上 -kl命令行啟動WinDbg即可
- D:\WinDbg>windbg-kl
顯示界面如下:
也可以運行WinDbg后打開內核調試連接對話框,選擇Local選項頁,點擊 “ 確定 ” 按鈕打開本機內核調試功能

Vista及以后的系統,記得先以管理員權限運行VistaLKD工具,點擊Enablelocalkerneldebug按鈕開啟本
機內核調試功能,然后再以管理員權限運行WinDbg打開本機內核調試。

本機內核調試下可以做很多事情,比如查看內核結構定義、反匯編內核函數、顯示內核Hook等。

