2008年8月12日火曜日

VirtualServer・VirtualPCに仮想COMポート経由でwindbgをアタッチ

Microsoftが配布しているWindowsのデバッガ、windbgというものがある。
どうもよくわからない不具合の出るソフトがあったので、VirtualServer仮想PC上でwindbgを走らせてみようと思ってMicrosoftのKBでwindbgの情報を探してみる。
 
VirtualServer・VirtualPCのホストOSから、ゲストOSのカーネルにアタッチする方法があったので試してみた、多少本筋からずれた気もするがやむなし。
 

How to debug a virtual machine on a host computer(略) part 1 of 2
How to debug a virtual machine on a host computer(略) part 2 of 2


 

Part1では仮想PCのカーネルにアタッチする方法、Part2はVirtualServer自身のデバッグ方法?かな、2はあまり読んでない。
 

詳しくはPart1を見るとわかるので、設定する箇所を画像でメモ。
[caption id="attachment_539" align="alignnone" width="300" caption="画像:ゲストOSのCOM1を名前付きパイプに接続"]画像:ゲストOSのCOM1を名前付きパイプに接続[/caption]
 
ゲストOSの COM1 に「\\.\pipe\com2」という名前付きパイプ(※ややこしくて失礼、com2の部分は名前なので何でもよい)に接続します。
UNCなので途中のピリオドはlocalホストを表し、もちろんUNCパスなら他のPCでもよい(はず)。
 

ゲストOS上での準備としてboot.iniをデバッグオプション有効にしておく必要があります、msconfigコマンドなどを使用して設定。

 

[caption id="attachment_540" align="alignnone" width="399" caption="画像:デバッガも名前付きパイプに接続"]画像:デバッガも名前付きパイプに接続[/caption]
 
ゲストOSのカーネルにアタッチする準備。
画像はwindbgの[File]メニューからカーネルデバッグを選択した後の名前付きパイプへの接続設定。
 

 

[caption id="attachment_541" align="alignnone" width="300" caption="画像:仮想OSのカーネルデバッグ出力が得られている"]画像:仮想OSのカーネルデバッグ出力が得られている[/caption]
 
windbgを待ち状態にした後、ゲストOSを起動したところ。アタッチはいつでもできる模様。
さっそくいろいろ例外を吐いてくれている、とりあえずF5で先に進める。
 
 

[caption id="attachment_542" align="alignnone" width="300" caption="画像:Breakしてレジスタを表示してみる"]画像:Breakしてレジスタを表示してみる[/caption]
 
折角なので「Ctrl+Break」!!カーネルを止めてみる。
普段OSが勝手に止まると色々冷や汗ものだが、自分の意思で止めるというのはなかなかどうして面白い。
 
 


しかしプログラミングの知識があるわけでないので、個人では「!analyze -v」コマンドで自動解析をしてもらうくらいしか使い道がない。
困ったらプログラムがわかる人に聞いてみよう。