既然要透過 remote 的方式來做 Kernel Debug,所以 Windows 提供了不少方法讓你連線到另一台電腦,包括 Serial cable (COM)、1394 cable、Network cable、USB cable …等等,其中 Serial cable & 1394 使用上的限制比較少,support 的平台也比較多,Network cable 與 USB cable 對硬體與平台的限制都不少,所以要確認你的硬體平台有支援的話,才可以透過 Network cable, USB cable 來做 debug。
這次就來介紹一下:透過 Network cable 來做 Kernel Debug,限制如下
- Target computer - Windows 8.0+
- Target computer - 網卡 Vendor 支援清單
- Host computer - Windows XP+
- Host computer - WinDbg version 要 WDK 8.1+
1. 確認 Target computer 網卡支援性
啟動裝置管理員 Device Manager (或是執行指令 devmgmt.msc)
Device Manager
找到你的網卡,點右鍵,選Property
Ethernet Properties
注意看Value:PCI\VEN_8086&DEV_155A
Vendor ID = 8086
Device ID = 155A
照著這個 Vendor ID & Device ID 到 MSDN 網頁中比對一下,如果找得到的話,恭喜你,代表這台電腦是可以做 Kernel Debug的。
圖3 (Optional)
Ethernet Properties
當你的電腦不止一張網卡的話
要注意圖中的 Location : PCI bus 0, device 25, function 0
這個 magic number 在之後會用到
2. 開啟 Target computer 的 Debug mode
在舊 XP 的時代,開啟 Debug mode 必須透過 boot.ini,但是在 Vista 以後,可以透過 bcdedit 指令直接開啟 Debug 的功能
以 admin 的權限開啟 cmd (命令提示字元)
確認你的 host computer 的 ip(w.x.y.z) & port(n 建議50000+)
兩台電腦必須在同一個網域或是 ping 得到對方的 ip 才行
確認你的 host computer 的 ip(w.x.y.z) & port(n 建議50000+)
兩台電腦必須在同一個網域或是 ping 得到對方的 ip 才行
輸入以下指令
bcdedit /debug on bcdedit /dbgsettings net hostip:w.x.y.z port:n
bcdedit 會回傳一組 Key,必須將這組 Key 傳至 host computer
如果你有超過一張網卡以上
必須再設定你連線的網卡是哪一張
指定 busparams b.d.f (參考 圖3 取得 bus id, device id, function id)
bcdedit /set "{dbgsettings}" busparams b.d.f
最後可以確認一下你目前的設定是什麼
bcdedit /dbgsettings
3. Host computer 開始 debug
接上網路線在 Host computer 開啟 WinDbg,選擇 File | Kernel Debug
輸入正確的 port 與 Key
按下確定後Target computer 重開機應該就可以開始 debug 了
指令
- Ctrl + Break (馬上中斷)
- Ctrl + Alt + K (Target computer 重開機時,在 Windows initialize 後馬上中斷)
- ed Kd_DEFAULT_Mask 0x8 # display default kernel log
- dd Kd_DEFAULT_Mask # disable display default kernel log
Reference
沒有留言:
張貼留言