1. 程式人生 > >【舊文章搬運】Windbg+Vmware驅動除錯入門(四)---VirtualKD核心除錯加速工具

【舊文章搬運】Windbg+Vmware驅動除錯入門(四)---VirtualKD核心除錯加速工具

原文發表於百度空間,2009-01-09
==========================================================================

今天又想起來VirtualKD這個東西,試用了一下,真是爽壞了,可能我火星了~~

很久以前就知道小喂有個VmKd工具,使用Vmware的後門指令直接拷貝資料來代替模擬串列埠,能大大提高除錯時的資料傳輸速度。不過那個對VMware版本的依賴性太強,我的Vmware就沒法用,所以很不爽得又放下了,很長一段時間也沒關注過。最近翻資料時又找到index09同學的一篇文章,介紹了比Vmkd更好用的VirtualKD,於是馬上下回來試用了一下,安裝簡單多了,使用方便,終於體會到了什麼叫做速度,除錯時那個嗖嗖的啊,比老爺車一樣的串列埠爽太多了,相信某些同學已經用了很久了。各位如果不嫌我火星的話,我就來詳細介紹一下,好東西分享給大家:)

使用場景:如果你正在使用Windbg+Vmware或Windbg+VirtualBox進行核心除錯,並且覺得虛擬串列埠方式過於緩慢,那麼這個就是你最需要的東西了!它可以大幅提升除錯時資料傳輸的速度,實在是居家旅行、殺人滅口,必備良藥~~(後悔用得太晚了)
這是一個開源專案,工程在sourceforge上:
http://sourceforge.net/projects/virtualkd/

官方網站:http://virtualkd.sysprogs.org/
原理和Vmkd差不多,但是使用範圍更廣,安裝更簡單了。我簡單講一講在Vmware上如何使用。

一、準備工作

從上面的網址下載VirtualKD-2.2.zip(當前版本為2.2),並解壓出來。應該會有以下檔案:

PS:搬運這篇文章時,VirtualKD已經更新到了3.0版本,支援Win10系統,下載地址 http://virtualkd.sysprogs.org/download/


二、Guest OS中相應部分的安裝
啟動虛擬機器中的GuestOS,然後把上面的target資料夾的內容全部拷貝到GuestOS中。
執行vminstall.exe,會出現以下介面:


這裡相關的東西除了拷貝檔案外新增服務外,其實就是新新增一個DEBUG模式的啟動選單,就是更改boot.ini(如圖中紅框部分所示),但是這一切由vminstall.exe來完成。


不過我發現vminstall.exe好像有個小Bug,新新增的啟動入口並沒有名稱顯示,你可以開啟boot.ini自己加上。如果是Vista或Win7的話,使用如下命令:
bcdedit /set dbgtransport kdvm.dll
這個裝好後,GuestOS中的部分就完成了。

三、HOST OS中相應部分的安裝
實際上VirtualKD完全綠色,不需要安裝,只要找個合適的地方放好,然後執行vmmon.exe就可以了~~
vmmon.exe會自動找到vmware-vmx.exe並顯示在上面,並顯示它的一些詳細資訊。


然後在介面下方的位置你會看到一些設定選項:
Start debugger automatically:GuestOS啟動時自動啟動偵錯程式
Stop debugger automatically:退出時自動關閉偵錯程式(經測試好像不好使)
DbgBreakPoint() on start:系統啟動時的第一時間就中斷下來
TraceAssist params:該功能是把虛擬機器GuestOS的DbgPrint輸出記錄到檔案,而不是傳送到偵錯程式,這樣可以在輸出特別頻繁時提高效能
Debugger path:偵錯程式路徑,這裡選擇你的Windbg就可以了
Unpath process/Repath process:動態地對vmware_vmx.exe進行Patch或恢復(這也是VirtualKD功能的核心)
Run debugger:啟動設定好的偵錯程式
Close:退出vmmon.exe

在HOST端我們要做的工作將會非常簡單,只需要在Vmware中啟動虛擬機器的同時啟動vmmon.exe就可以了。剩下的vmmon.exe都會替我們做好(動態查詢vmware-vmx.exe並進行Patch).
如果你選上了Start debugger automatically那麼虛擬機器中GuestOS啟動的同時vmmon會自動幫你開啟偵錯程式,非常方便。
如果你仍然想像以前那樣自已通過加引數的方式啟動windbg進行雙機除錯,那麼它的引數可以這麼寫:
"C:\Program Files\Debugging Tools for Windows\windbg.exe" -k com:port=\\.\pipe\kd_WinXP,pipe
關鍵就是這個管道的名稱,也就是kd_<你的GuestOS的安裝目錄>.比如我的XP虛擬機器安裝目錄在E:\Vmware\WinXP,那麼管道名稱就是kd_WinXP.
實際上也就是虛擬機器系統的*.vmx檔案所在的資料夾的名字。
更方便一點,直接看vmmon裡顯示的管道名稱就可以了。


如果你使用的是這種記憶體動態Patch方式的話,因為總是要執行vmmon.exe,建議還是選上自動啟動偵錯程式,會方便一點。或者可以按照readme.txt中的相關介紹直接進行永久性檔案Patch,這樣就不需要執行vmmon.exe了,詳情可參考readme.txt。
另外,VirualKD還解決了一個BUG,就是GuestOS中斷在偵錯程式時會大量佔用CPU的問題,這個也很爽了。搞完這些之後,除錯時資料傳輸的速度將會大幅提升,你就可以體驗極速的感覺了~~~