VMware Server で動作する Windows XP のカーネルデバッグ環境を整える

2010年2月27日の日記ではじめてカーネルデバッグしました。分からないことだらけだったけど、調べるのは面白かったです:D。VMware Server で動作する Windows XPカーネルデバッグするためには、準備が必要だったので、その過程をメモとしてまとめます。

カーネルデバッグ環境の準備

カーネルデバッグ環境は、最終的に下記画像のようになります。下記画像の 1) 〜 4) の流れに沿って、カーネルデバッグ環境を準備します。


1). windbg のインストール

まず、カーネルデバッグができる windbg をインストールします。基本的には、Microsoft のサイトからインストーラをダウンロードしてインストールするだけです。2010年2月27日の日記では、windbg 6.11.1.404 をインストールして使用しました。

windbg をインストールしたら、OS のシンボルファイルを OS に合わせて取得するように、Microsoft Symbol Server へのシンボルパスを設定します。windbg の [File]メニュー → [Symbol File Path] を選択します。起動した設定ウインドウで Microsoft Symbol Server のパスを設定します。Microsoft Symbol Server のパスについては、Microsoft の「Windows デバッグ ツールとシンボル:はじめに」のサイトに記述があります。設定すると、下記画像のようになります。


2). Guest OS に仮想 COM ポートを作成する

VMware Server で動作する Windowsカーネルデバッグする場合、Guest OS の Windows に COM ポートを追加し、その COM ポート経由でカーネルデバッグすることになります。追加する COM ポートには名前付きパイプ(named pipe)を設定し、windbg はその名前付きパイプを介して仮想マシンデバッグします。

VMware Server 1.0.8 で仮想 COM ポートを追加する流れを下記画像にまとめました。Guest OS の設定画面を起動し、下記画像の(a)〜(e)の手順を実施すれば、仮想 COM ポートの追加は完了します。(a)〜(e)について、簡単に後述します。

(a).設定画面の [Add] ボタンから仮想ハードウェアを追加する
(b).ハードウェアタイプで Serial Port を選択する
(c).Serial Port タイプで「Ouput to named pipe」を選択する
(d).Named pipe に以下を設定する
  「\\.\pipe\com_1」
  「This end is the server」
  「The other end is a virtual machine」
(e).仮想 COM ポートの追加完了

3). Guest OS を debug モードで起動する

カーネルデバッグするためには、Windows XPデバッグモードで起動する必要があります。Windows XPデバッグモードで起動するため、Windows の起動パラメータにデバッグオプションを設定します。具体的には、C:\boot.ini に以下を追加します。「/debug /debugport=com1 /baudrate=115200」がデバッグモードに関連するパラメータとなります。「/debugport」には、Windows XP の CO M ポートを指定します。2) で追加した仮想 COM ポートが COM1 に該当するため、ここでは com1 を指定しました。デバッグオプションに関しては、MicrosoftKB170756 を参照してください。

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

デバッグオプションを指定した後に Windows XP を再起動すると、OS が起動する前に下記画像のようにブートする OS を指定する画面が表示されます。ここで、「Microsoft Windows XP Professional [debugger enabled]」を選択します。


4). windbg を起動する

1) 〜 3) でカーネルデバッグの準備が整いました。ここで、windbg を起動します。windbg を起動したら、[File]メニュー → [Kernel Debug] を選択します。[Kernel Debug] を選択すると、Kernel Debug の設定画面が表示されます。この設定画面で、2) で作成した名前付きパイプ「\\.\pipe\com_1」に接続するように設定します(下記画像を参照)。

以上で、カーネルデバッグ環境が整いました。これで 2010年2月27日の日記で掲載した画像のようにカーネルデバッグが可能となります。

参考情報