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 を指定しました。デバッグオプションに関しては、Microsoft の KB170756 を参照してください。
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]」を選択します。