Windows Vista 之後已經不再將開機選項儲存於 boot.ini 中,而是改以 BCD (Boot Configuration Data) 儲存,因此以前透過編輯 boot.ini 啟動 Windows kernel debugging 的方法也得更新一下。這裡我們透過 bcdedit.exe 來編輯 BCD ,讓 Windows 啟動後可以進入 debug mode 。
VMware 設定
Debuggee 部分,和以前一樣使用 named piped 來替 guest OS 模擬 serial port (COM port)。
- 進入 guest OS 設定。
- 新增硬體。
- 選擇 Serial Port 裝置。
- 選擇 named pipe 來模擬我們的 serial port。
- 替 named pipe 取一個名字,這個名字等會會被 WinDbg 使用。
- 最後別忘了把 Yield CPU on Poll 選項勾起。
- 完成新增後,請留意 VMware 替我們新增的 Serial Port 的編號,以上圖為例是:Serial Port 2
Windows Boot 設定
- 使用 administrator 權限開啟一個 cmd。
- 透過 BCDEdit 編輯開機選項,使用 COM port (serial port)來做為 debugger 和 debuggee 間的溝通,debugport 的編號請根據 VMware 的 Serial Port 設定而定:
bcdedit /dbgsettings serial debugport:2
-
複製現有的開機選項到 DebugEntr:
bcdedit /copy {current} /d DebugEntry
執行完該指令後,會出現一個 ID ,代表我們要複製出來的開機選項,該 ID 在每台電腦上都不太一樣。 -
調整開機選樣的順序:
bcdedit /displayorder {current} {ID}
-
打開 debug 選項:
bcdedit /debug {ID} ON
Enable Debug Print
Vista之後,DbgPrintEx()、vDbgPrintEx()、vDbgPrintExWithPrefix()、KdPrintEx() 等選擇性的輸出函式預設是關閉的,要啟動的話,需要到 registry 上設定對應的 log level [3]:
到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter 下新增 DEFAULT=dword:0000ffff
實際數值,依照需求而定,0000ffff 足以應付大多數用途。
使用
在 bcdedit 設定完成後,重開機,便會看到新的開機選項 DebugEntry:
選擇 DebugEntry 後,我們便可以在 debugger 的機器上的 cmd 執行下面指令來進行 kernel debugging,com_1 就是我們當初在 VMware guest OS 裡頭設定的名字:
windbg -b -k com:pipe,port=\\.\pipe\com_1,resets=0
停用驅動程式簽章增強(Disable Driver Signature Enforcement)
Vista 之後的 64-bit OS ,Microsoft 都會要求 drivers 必須有 WHQL 的認證才能啟動。這對於一般使用者來說可能沒有影響,但對於有在開發、測試 drivers 的人就會是個問題。
最簡單的方式是,開機時,使用 F8 進入進階模式:
並選擇(停用驅動程式簽章增強)Disable Driver Signature Enforcement。
Test Signing
若是 drivers 有 test sign ,那麼我們還可以使用 BCDEdit 來允許 testing sign driver 的載入[4]:
bcdedit /set TESTSIGNING ON
設定完成後,需要重開機。
要驗證 test sign 是否成功,可以使用 bcdedit 檢查,或是觀察桌面右下角的文字說明:
Reference
- Boot Parameters to Enable Debugging
http://msdn.microsoft.com/en-us/library/windows/hardware/ff542279%28v=vs.85%29.aspx - Kernel Debugging in Windows Vista
http://msdn.microsoft.com/en-us/windows/hardware/gg487520 - Reading and Filtering Debugging Messages
http://msdn.microsoft.com/en-us/library/windows/hardware/ff551519%28v=vs.85%29.aspx - The TESTSIGNING Boot Configuration Option
http://msdn.microsoft.com/en-us/library/windows/hardware/ff553484%28v=vs.85%29.aspx
See Also
- Windows Debugging – Kernel Debugging with WinDbg and VMware
http://keikoblog.blogspot.com/2009/03/windows-debugging-kernel-debugging-with.html