MacOs/Liunx主機搭建windows平台雙機調試環境
0x00 前言
本文的主要試用對象是Mac OS/Linux用戶,對於想調試windows內核相關的一些東西時,需要搭建雙機調試環境的一些記錄。另外對於本機是windows的用戶也完全試用,windows搭建雙機環境是會更簡單一些,但是基本是一樣的。
0x01 測試環境
- VMware 15
- windows 7 x86 –> 調試機
- windows xp –> 被調試機1
- windws 7 x86 –> 被調試機2
- Ubuntu 18.04 –> 物理機
- windbg –> 調試器
0x02 環境搭建
環境搭建的核心主要在虛擬機的設置上,這塊設置好了,後面就會比較順利。
1.虛擬機的配置
虛擬機的安裝在這裡就不在敘述,安裝好虛擬機以後,我們打開virtual machine settings–>Add–>serial port–>finish
,如下圖所示
隨後我們選擇Use socket(named pipe)
選項,這裡需要輸入一個文件的位置來做socket連接的轉儲,相當於調試信息轉存的中轉站,這裡只需要指定就可以,稍後會自動在所設置目錄自動創建文件,我這裡是com1
文件,這裡需要特別說明一下,在設置虛擬機的串行端口指定com1
還是com2
這取決於serial port的端口號
是幾,默認情況下虛擬機添加了打印機 print
,所以此處默認端口為2
,我在測試時使用com2
沒成功,刪除了虛擬機的打印機後,使用的com1端口
可以成功。這台虛擬機是xp,是作為被調試機用的,所以我們選擇server
,接着勾選I/O Mode
,使此虛擬機支持cpu中斷,如下圖所示
接着設置調試機,基本和上面的設置一樣,區別是,這次是選擇client
,不勾選I/O Mode
選項,如下圖所示
Ok,到這裡虛擬機的設置就完成了,接下來是被調試機的設置,我們打開被調試機
2.被調試機的設置
這裡先拿xp來說一下,windows7及以上的系統設置和xp略有不同,稍後會敘述.打開被調試機,win+R
鍵入c:\boot.ini
打開系統啟動配置.然後添加一行配置,如下
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional debug" /debug /debugport=com1 /baudrate=115200 /fastdetect
這裡的debugport
需要和剛才設置的文件的名字一樣,這裡也是指定我們選中的串行接口。baudrate
默認為115200
,然後ctrl+s保存,再次重啟就會多出一個支持調試的啟動選項.如圖
Windows Vista之後的系統,不在使用BOOT.INI
文件,改為了使用Coot Configuration Data
,其配置的原理也大同小異,下面以windows 7為例子,做一個示範
C:\Windows\system32>bcdedit.exe /copy {current} /d "windows 7 Debug with Serial" #複製當前的啟動入口
已將該項成功複製到 {2bd58bb9-12d9-11eb-b328-b016eb5db92e}。
C:\Windows\system32>bcdedit.exe /debug {2bd58bb9-12d9-11eb-b328-b016eb5db92e} on #啟動入口啟動內核調試
操作成功完成。
C:\Windows\system32>bcdedit /dbgsettings serial DEBUGPORT:1 BAUDRATE:115200 #serial表示使用串口,對應上面xp的com1
操作成功完成。
C:\Windows\system32>bcdedit /dbgsettings #檢查上述的設置
debugtype Serial
debugport 1
baudrate 115200
操作成功完成。
C:\Windows\system32>bcdedit #查看Windoes的啟動入口
Windows 啟動管理器
--------------------
標識符 {bootmgr}
device partition=C:
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {current}
resumeobject {2bd58bb5-12d9-11eb-b328-b016eb5db92e}
displayorder {current}
{2bd58bb9-12d9-11eb-b328-b016eb5db92e}
toolsdisplayorder {memdiag}
timeout 30
Windows 啟動加載器
-------------------
標識符 {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows 7
locale zh-CN
inherit {bootloadersettings}
recoverysequence {2bd58bb7-12d9-11eb-b328-b016eb5db92e}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {2bd58bb5-12d9-11eb-b328-b016eb5db92e}
nx OptIn
Windows 啟動加載器
-------------------
標識符 {2bd58bb9-12d9-11eb-b328-b016eb5db92e}
device partition=C:
path \Windows\system32\winload.exe
description windows 7 Debug with Serial
locale zh-CN
inherit {bootloadersettings}
recoverysequence {2bd58bb7-12d9-11eb-b328-b016eb5db92e}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {2bd58bb5-12d9-11eb-b328-b016eb5db92e}
nx OptIn
debug Yes
0x03 調試機的設置
打開調試機,安裝好windbg。隨後我們複製一個新的桌面快捷方式,改名字(為了區分原來的快捷方式),然後右鍵-->屬性-->目標
在後面添加-b -k com:port=1,baud=115200
圖片如下
這時我們需要重啟被調試機,進入支持debug的啟動選項,這時我們觀察windbg已經連接到了目標主機,如下圖
0x04 設置內核調試用的符號表
在內核調試下,按g
可讓目標主機繼續運行,如果想讓目標中斷可選擇調試器的debug–>Break
選項,即可把控制權交還調試器,隨後我們加載內核調試需要的符號表,首先需要調試機聯網,隨後在調試器鍵入ctrl+s
打開符號表路徑設置,輸入如下SRV*c:\symbols* //msdl.microsoft.com/download/symbols
這裡的意思是告訴調試器,首先去c盤的symbols
目錄找符號表,如果找不到就聯網到微軟的符號表服務器遠程下載,下載的文件同樣會存到symbols
目錄方便下次使用.所以需要手動到c盤新建一個名字為symbols的空文件夾.隨後在調試器的命令行輸入.reload /f
重新加載符號表,一般來說第一次都會聯網下載符號表的,下載過程中由於某些文件變化符號表已經不維護,所以會出現部分找不到的情況,但基本影響不大,如果出現完全不能下載的情況,請參考之前的文章解決。下載好以後就可以雙機調試了