使用 VMware + win10 + VirtualKD + windbg 從零搭建雙機內核調試環境


前言

當我們沒有兩台物理機時,又想做雙機內核調試怎么辦?當然是裝虛擬機啦!本文總結了使用 VMware15.5 + win10 + virtualkd + windbg 搭建雙機內核調試環境。

安裝環境

  1. VMware 版本: 15.5 pro 。可以到 VMware 官網下載地址 下載最新版本。

  2. 我的物理主機系統:win10 1909。其它版本的 windows 也可以,VMware15.5 最低支持 win7 系統。

  3. 虛擬機系統鏡像:win10 1809 x64。其它版本的系統也可以。我們可以在 msdn i tell you 上面找到各個版本的 windows 官方鏡像。除了系統鏡像,還包括其它很多工具的官方鏡像,比如 vs, office 等。

    msdn i tell you 下載地址

  4. windbg版本:10.0.18362.1,其它版本的也可以。windbg 包含在 windows sdk 中。可以到微軟官網 SDK 下載地址 下載。如果只需要 windbg,推薦下載 .exe 形式的安裝包。在安裝的時候,可以只勾選 Debugging Tools for Windows

 

只下載 debugging tools
只下載 debugging tools

 

安裝 VMware & 安裝 win10

下載 VMware 到本地后,直接雙擊即可安裝,一路點擊 下一步 即可。需要注意以下兩點:

  1. 盡量下載最新版本的 VMware,早期版本的 VMwarewin10 1909 上可能有兼容性問題。
  2. 安裝完成后,最好重啟系統!

安裝好 VMware 后,就可以安裝系統鏡像了。通過 文件(F) -> 新建虛擬機(N) 即可開始 新建虛擬機向導。一般我們通過 安裝程序光盤映像文件(iso)(M) 的形式選擇下載好的系統鏡像安裝,然后一路 下一步(N) 即可。

 

選擇系統鏡像
選擇系統鏡像

 

安裝完成后,可以啟動了。但是可能遇到一些問題,我做了簡單的總結。

可能遇到的問題

  • 提示 Intel VT-x 被禁用。
    虛擬機鏡像啟動錯誤

根據提示,在 BIOS 里開啟 Intel VT-x

重啟進入BIOS ,打開 Intel Virutal Technology,按 F10 保存退出。

 

在BIOS中開啟VT-x
在BIOS中開啟VT-x

 

  • 提示 VMware WorkstationDevice/Credential Guard 不兼容。

 

incompatible-with-credential-guard
incompatible-with-credential-guard

 

強烈建議先檢查下 Hyper-V 是否開啟,如果開啟了,請先關閉 Hyper-V

 

關閉 Hyper-V
關閉 Hyper-V

 

如果關閉 Hyper-V 后還是出現上圖的提示。請參考 禁用 Device/Credential Guard 的微軟官方文檔

點擊工具下載鏈接,下載相應的腳本文件到本地。如果我們的系統不是英文系統,按照提示改變腳本里的

*$OSArch = $(gwmi win32_operatingsystem).OSArchitecture$OSArch = $((gwmi win32_operatingsystem).OSArchitecture).tolower()

然后以管理員權限執行 DG_Readiness_Tool_v3.6.ps1 -Disable -AutoReboot 即可。

-Disable 表示關閉。

-AutoReboot 表示自動重啟系統,根據自己的需要指定。

 

腳本執行結果
腳本執行結果

 

重啟后,會有提示是否要真的禁用此特性。按 Windows鍵或者 F3 鍵禁用,按Esc 跳過。

 

禁用 Device/Credential Guard
禁用 Device/Credential Guard

 

順利安裝完系統過后,我們就可以開始進行雙機內核調試了。

通過虛擬串口方式連接

如果我們希望通過虛擬串口的形式連接,我們在系統設置前,一定要注意: VMware 中的打印機會占用默認的 串口 1。如果不移除打印機,我們新建的串口會是 串口 2(這樣,我們在被調試系統中設置的時候,需要設定debugport 的值為 2)。

 

新建串口2 並設置參數
新建串口2 並設置參數

 

當然,我們可以移除打印機,然后新建串口,這樣新建的串口就是默認的 串口 1 了。

 

移除 VMware 中的打印機
移除 VMware 中的打印機

 

我以保留打印機,使用 COM2 為例,錄制了一份屏幕錄像。這里對整個操作過程做一個簡要描述:

  • 新建串口,因為打印機占用了 串口 1,所以我們新建的串口是 串口 2

  • 設置 pipe 參數,我設置的是 \\.\pipe\bcn_com,其他參數默認即可。

  • 啟動虛擬機系統,設置調試參數,命令如下:

    bcdedit /debug on
    bcdedit /dbgsettings serial debugport:1 baudrate:115200
  • 以管理員權限運行 windbg,通過界面連接。

    windbg 界面設置

  • 重啟虛擬機系統,發現連接不上。因為我們新建的串口是 串口 2,而我們在虛擬機系統里設置的是 串口 1

  • 重啟虛擬機系統,設置調試參數,命令如下:

    bcdedit /debug on
    bcdedit /dbgsettings serial debugport:2 baudrate:115200
  • 重啟虛擬機系統,這次成功連接上了。

  • 最后,還演示了 windbg 通過命令行直接連接。命令行如下:

    windbg.exe -k com:pipe,port=\\.\pipe\bcn_com,reconnect
 

通過COM進行雙機內核調試

通過 VirtualKD

經常做雙機內核調試的小伙伴兒一定對 VirtualKD 不陌生。可以大大提高雙機內核調試的速度,可謂神器。

幾年前,用 VirtualKD 搭建雙機內核調試環境很簡單。沒想到這次居然各種連接不上。通過 google 搜索關鍵字 VMware15 VirtualKD,在 VirtualKD github issues看雪論壇『求助問答』的帖子 看到已經有小伙伴兒遇到這個問題了。應該是 VirtualKD3.0VMware15.5 不兼容。真是個壞消息,不過也有好消息 —— 已經有大佬解決了這個問題,github 上對應的倉庫是 VirtualKD-Redux

在查找解決方案的過程,發現有人遇到另外一個問題。在虛擬機里執行 bcdedit /debug on 失敗,提示值被保護,如下圖:

 

摘自 github 帖子
摘自 github 帖子

 

可以在 虛擬機設置高級 選項里,禁用 安全引導

 

disable-security-boot
disable-security-boot

 

VirutalKD-Redux 的使用方法和 VirutalKD 一樣,簡要步驟如下:

  1. 在調試主機端運行 vmmon64.exe,點擊 Debugger Path... 選擇調試器路徑。
  2. target64 拷貝到虛擬機中(如果是 32 位系統,請拷貝 target32)。
  3. 在虛擬機中執行 target64 目錄下的 vminstall.exe 安裝 VirtualKD-Redux
  4. 重啟虛擬機系統,選擇新建立的 Entry,並且按 F8 選擇禁用強制簽名。
  5. 如果順利,調試器會自動彈出並連接到被調試系統(因為 Start debugger automatically 默認是勾選狀態)。
  6. 如果調試器沒自動彈出,或者我們意外的關閉了調試器,我們可以通過點擊 Run Debugger 按鈕,手動啟動調試器。

整個過程,非常簡單。具體過程錄屏如下:

通過 virtualkd 進行雙機內核調試

 

windbg 符號路徑設置

當我們執行一些命令的時候(比如,!thread),需要符號文件的幫助。我們可以通過 _NT_SYMBOL_PATH 環境變量設置符號路徑。如果還沒有設置,可以在 windbg 中執行 .symfix path/to/symbol_cache 自動設置微軟符號服務器為上游符號服務器。當需要符號時,windbg 會先到 path/to/symbol_cache 中查找符號,如果找不到,會繼續到微軟符號服務器上查找,如果在微軟符號服務器上找到了,會緩存到 path/to/symbol_cache,然后從 path/to/symbol_cache 加載符號。

溫馨提示:

  • .symfix 命令會刪除 windbg 中現有的符號路徑設置。
  • 目前,好像需要ke xue上網才能成功連接微軟符號服務器。

總結

  • 使用 VMware 前,最好禁用 Hyper-V,禁用 Security Boot,開啟 Intel VT-x

  • 一定要注意,VMware 默認帶的打印機會占用 串口 1,如果不刪除打印機就新建串口的話,新建的串口是 串口 2

  • VirtualKD3.0 還不支持 VMware15.5,我們可以使用 VirtualKD-Redux

  • 執行 .symfix path/to/symbol_cache 使用微軟符號服務器。

參考資料

VirtualKD official install tutorial

"VMware Workstation and Device/Credential Guard are not compatible" error in VMware Workstation on Windows 10 host (2146361)

Setting up kernel debugging (VirtualKD)

VMware+Windgb+Win7內核驅動調試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM