2012-10-02 95 views
10

我用來調試Windows內核使用VirtualKD,WinDBG和單個虛擬機。從Linux調試Windows內核

最近我買了一臺Linux機器,現在我想知道 - 當主機無法運行時,調試Windows內核的最簡單方法是什麼?VirtualKD/WinDBG *

我認爲解決方案將需要兩個虛擬機,但我寧願我的託管實際機器上的兩個實例,而不是居住在另一個內部的虛擬實例的實例...

反正是有使這項工作?

在此先感謝!

*葡萄酒是出於穩定性的原因不得已......

回答

16

解決了!基本上,我結束了使用(VirtualBox的)虛擬機仿效串行連接(交叉線)在Unix域套接字(在主機上)。欲瞭解更多信息,請閱讀下面:

硬件設置*:

  • 調試:
    • 確保機器關閉,編輯串口設置。
    • 啓用端口1,並如下指定值:端口號:COM1,端口模式:主機管,創建管:未選中(客戶端),端口/文件路徑:的/ tmp/win_link
  • 調試器:
    • 同上(使用相同的路徑),只是這一次創建管應經過(服務器)。

調試器設置:

  • 運行WinDBG中,然後按Ctrl + K調用內核調試
  • COM,請輸入:波特率:115200,端口:COM1,復位:0和驗證和重新連接是選中(重要)。
  • 你會看到以下的輸出:Opened \\\\.\com1 Waiting to reconnect...

調試設置:

  • 運行上/端口的bootcfg /調試COM1 /波特115200/ID 1。要驗證,請運行bootcfg。**
  • 重新啓動。
  • 在啓動階段很早,其他機器上的WinDBG應該檢測到調試對象正在運行。

*假設使用VirtualBox。 VMWare/KVM用戶可能可以通過類似的步驟獲得相同的結果。另外,更多信息請參考VirtualBox docs

**假設客人是Windows XP。後來的版本包括bcdedit,其可以如here所述使用。

+0

你的配置似乎完美的,但不管我用什麼配置,我看不出兩個我的Windows虛擬機的串行端口。你有過這樣的問題嗎? –

0

現在的另一種選擇是啓用本地內核調試。這附帶一些limitations,但是它將使您能夠訪問內核數據,而只需使用一個虛擬機。

此方法僅適用於Windows 8.0和Windows Server 2012及更高版本。

遵循以下步驟:

  1. 打開命令提示符窗口管理器。
  2. 輸入bcdedit /debug on
  3. 如果計算機沒有配置爲調試運輸的目標,進入bcdedit /dbgsettings local
  4. 重新啓動計算機。

一旦系統重新啓動,可以執行WinDBG作爲Administrator,按ctrl+k或去File -> Attach to kernel -> Local,然後按OK。

Attach to Kernel Option

在這一點上,你就可以只執行內核命令和訪問內核結構:

enter image description here

的Windows 10下,在新的WinDBG版本測試(預覽) 。

參考:Setting Up Local Kernel Debugging of a Single Computer Manually