Windows Debugging – Kernel Debugging with WinDbg and VMWare

看到 Royce 大師開始把 Nt Insider 的精華實用文章分享給大家,讓向來只有三分鐘熱度的我,也想硬著頭皮寫點東西,不過我是初學者,就從最最入門的、簡單的開始寫起吧,啊啊,希望不要變成富奸

前言

mini_wininternals

Windows Internals 這本書是許多人進入 Windows 的第一本完整教科書,目前出到第四版,不過我一直懷疑大師 Mark E. Russinovich & David A. Solomon 被富奸上身,因為第五版已經推延了好幾次,目前看來會在 2009/05/20 上市,這次希望是真的。

Windows Internals 第一章介紹了許多工具包來幫助我們瞭解 Windows Kernel ,其中 Debugging Tools for Windows 中的 WinDbg 尤其重要。透過它,我們可以去逐行執行、trace 、反組譯 Windows Kernel。

Debug Windows Kernel 可以是 live (debug 自己)或是 remote (需要兩台 Windows),不過還是 remote debugging 提供了比較多的功能和彈性,傳統上,remote debugging 需要兩台電腦透過

  1. null-modem cable: 也就是 serial port ,一般電腦的 COM port。
  2. 1394
  3. USB 2.0

啊,不管怎麼看兩台電腦總是很麻煩,不過幸好現在有 VMware 可以用了。把 VMware 上跑的 guest OS 當作 debugging target,在上面開啟它的 debugging port ,而提供 VMware 的 host os 則執行 WinDbg 。

VMware 設定

  1. 安裝完後,開啟 guest OS 的設定。 
    ScreenHunter_02 Mar. 01 12.24
  2. 新增一個 Serial Port 的硬體裝置。 
    ScreenHunter_03 Mar. 01 12.26  ScreenHunter_04 Mar. 01 12.27
  3. 使用 Named Pipe 去模擬 Serial Port 裝置。
     ScreenHunter_05 Mar. 01 12.29
  4. 替這個 Pipe 命名,這個名字稍後會被 WinDbg 用來作為連線的名稱。
     ScreenHunter_06 Mar. 01 12.31

  5. 最後別忘了把 Yield CPU on Poll 選項勾起。
     ScreenHunter_07 Mar. 01 12.33

Windows Boot 設定

設定完 VMware 後,接著要設定 debugging target 也就是 guest OS 的開機選項。也就是 boot.ini 檔。修改前請先備份一下!boot.ini 是系統的隱藏檔,要看到它,要到資料夾選項中把下面兩個選項關掉:

  1. 隱藏保護的作業系統檔案
  2. 顯示所有檔案和資料夾

路大師補充:boot.ini 有可能是唯讀檔,若遇到不能修改的情況,請記得把唯讀的屬性拿掉!

ScreenHunter_08 Mar. 01 12.39

看到 boot.ini 後,在 operating systems 的選項多加一個:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional - Debug" /fastdetect /debugport=com1 /baudrate=115200

要注意的是:

  1. debugport 的名字要跟你在設定 VMware Serial Port 時給的名字一樣才行。
  2. baudrate 可以任意調整成你想要的速度。

ScreenHunter_10 Mar. 01 12.45

重開機讓 boot.ini 生效。這時會發現開機多了一個選項(如下圖),這就表示成功了。

image 

使用

最後,在使用 WinDbg 時,可以在 cmd 下這個指令:

windbg -b -k com:pipe,port=\\.\pipe\com_1,resets=0

這樣 WinDbg 就會嘗試連透過 com_1 這個 debugport 去連上 debugging target 。成功的話,應該會看到像下面的圖:

image

 

參考資料

  1. Debugging Tools for Windows
  2. Driver Debugging with WinDbg and VMWare

更新

  1. 2009/03/01 13:02 原文
  2. 2009/03/01 22:28 加上小路學長補充的 boot.ini 檔唯讀的設定。

Keep hacking, and enjoy it!

4 則留言:

匿名 提到...

周大師,多寫一點噢
後進都是拜讀你文章來學習成長的~

Royce Lu 提到...

補充一件小小事情, boot.ini是唯讀檔,所以修改之前要先改一下檔案屬性喔.

大師這篇真的不錯 :)

Keiko 提到...

哈,感謝小路學長的指正。我已經修改了。不過要說這篇文章不錯,我真汗顏,拾人牙慧而已,參考 Lords of the Ring0 那篇來的,只是幫忙升級到新版 VMware 的設定。但就像你說的,台灣這方面的社群、資源比較少,希望能從簡單的地方開始寫起,挹注點氣力,ㄜ,要說台灣加油嗎? -_-|

上次尾牙回實驗室(被迫?!)做了一個 presentation ,其實還蠻感動的,因為 showmin 學長事後跑來問我一些書的事情,讓我覺得我竟然影響了一個人(自以為?),雖然是讓他分心畢業,不過還是暗爽了一下,科科,希望沒有誤導他~

對了,Buffett 不要嫌棄我這種太基礎的文章 ><

PS. 神人的怒吼

匿名 提到...

不不不
像我這種rookie需要這文章來領進門啊
可以省去不少try and error的時間哩
:)

Windows + Visual Studio + VSCode + CMake 的疑難雜症

Environment Windows 10 Visual Studio 2019 CMake 3.27.7 VSCode VSCode CMake Tools 1. CMAKE_BUILD_TYPE 是空的 參考一下 這篇 的處理。 大致上因為 Visual...