藉助VMware實現單機使用WinDbg

調試器中,SoftICE可以說是鼎鼎大名。而 Microsoft 的調試器 WinDbg 則有很多 SoftICE 不具備的非常有用的功能。對於從事 Windows 系統研究和驅動開發的人來說,WinDbg 實在是件上好的兵器,值得推薦。不過要想使用它並不是件容易的事,它需要有兩臺計算機,一臺調試,一臺被調試。這個條件對於大多數人來說是非常苛刻的。

今天我們介紹藉助VMware實現單機使用WinDbg進行調試的方法。

 VMware Support 中說,自 4.0.18.0 版本之後的 WinDbg 都支持了通過 pipe 來進行調試,不過微軟對此並沒有任何說明。所以,在VMware中虛擬被調試的系統,然後通過VMware虛擬一個com端口。使用這個虛擬的端口,就可以用 WinDbg 進行調試了。

具體步驟如下:

1 設置 VMware 的虛擬com

1.1 運行 VMware ,點擊 "Edit virtual machine settings"

1.2 點擊 "Add..." 來運行 VMware 的 Hardware Wizard

1.3 選擇 "Serial Port",點 "下一步"

1.4 選擇 "Output to named pipe",點 "下一步"

1.5 第一框裏保持默認的 "//./pipe/com_1"
      第二框裏選"This end is the server."
      第三框裏選"The other end is an application."
      選中 "Connect at power on"
      然後點擊 "Advanced>>

1.6 選中 "Yield CPU on poll"(VMware Support 中提到了這一點),然後點完成。

1.7 這樣就完成了虛擬com的設置。

1.8 重新啓動一下。

2 設置 VMware 虛擬出來的 guest os

現在 power on 虛擬出來的 guest os

2.1 設置boot.ini

在 c:/下,可以找到boot.ini,可以用記事本打開它。我們需要在 guest os 的啓動項上加些參數,才能夠使用WinDbg調試它。我們可以在現有的行後面直接加參數,不過強烈推薦複製一個新行,在新行的後面加參數。這樣在調試啓動 有問題的時候,我們可以方便的換回原來的啓動方式。下面就是我改好的boot.ini。
其中 " multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Professional" /fastdetect "
是原來的行。
" multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200 " 是我新加的將來用於 WinDbg 調試的行。

------------------------------------------------------------------------------------------

[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)/WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Professional" /fastdetect
multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200

-------------------------------------------------------------------------------------------

這 裏還要注意的是,timeout不要爲0,否則直接啓動默認的項。新行後面加上了參數 /debug /debugport=com1 /baudrate=115200 ,可以看到 debugport=com1 ,baudrate=115200 。參數的具體作用,可以參考 WinDbg 的幫助文件。

 

2.2 設置com1端口的速度
在 guest os 的設備管理器中把com1端口的速度也就是"每秒位數"項,設爲和上面一樣的115200。


3 設置 WinDbg

我們需要告訴WinDbg通過pipe進行連接和連接的速度。可以在命令提示符(cmd.exe)下加參數
-k com:port=//./pipe/com_1,baud=11520,pipe 運行WinDbg(VMware Support 中沒有提到 baud=11520 這個參數,其實這是個比較重要的參數)。 更方便的方法是在桌面建立一個WinDbg的快捷方式,在該快捷方式的屬性,"目標"框中,加上參數 -k com:port=//./pipe/com_1,baud=11520,pipe 。這樣運行這個快捷方式啓動的WinDbg就完成了設置。參數的具體作用,可以參考 WinDbg 的幫助文件。

 

4 推薦的操作順序

4.1 首先運行 VMware ,啓動 Guest OS ,到系統啓動選擇,選擇 "Microsoft Windows 2000 Professional - debug" 項,先不要按

      回車。

 

4.2 通過剛纔設置好的快捷方式運行WinDbg。

4.3 在 Guest OS 中選擇 "Microsoft Windows 2000 Professional - debug" 項,按回車。

4.4 稍等片刻,就連接上了。如果很長時間沒有連接上的話,可以按 WinDbg 菜單中的 "Debug"->"Kernel

      Connection"->"Resynchronize"。

 

? 其他
?.1 VMware Support 中還提到了可以通過修改虛擬機配置文件 來改變虛擬串口的速度,有興趣的話可以參考 VMware Support 中的方法。
?.2 WinDbg 的菜單項 "View"->"Show Version" 可以看到一些相關信息。

參考
Driver Debugging with WinDbg and VMWare http://silverstr.ufies.org/lotr0/windbg-vmware.html
VMware Support 相關部分 http://www.vmware.com/support/ws3/doc/ws32_devices3.html

發佈了37 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章