Inside Windows Debugging その2

このエントリーをはてなブックマークに追加

Mac OSXのVMWare Fusion上にWindows 8.1を動かした上でHyper-VにWindows 7を動かしてKernel Debuggingしてみました。

無能な為トラップにはまりまくって数時間何も進まなかったのでメモ。

まず、元々はMac OSXのVMWare Fusion上にWindows 8.1とWindows 7を載せてVMware FusionのVM同士をシリアルポートで繋いでWinDbgするつもりだったのですが、どうにもVM⇔VMのシリアルポートのやりとりが上手く設定できなかったので断念。多分pipeの指定方法が間違っていたのですが、原因特定に時間がかかりそうだった+”Inside Windows Debugging”の本の中ではHyper-Vでの構築方法が書いてあったのであきらめたしだいです。(この記事を発見したので、そのうちもう一回試してみます)

スクリーンショット 2014-04-20 21.57.25

Windows8.1がDebuggerでWindows7がDebuggeeになります。
まず、Windows8.1でHyper-Vを有効にするためには少しだけイレギュラーな設定にしなければいけません。VMWare Fusionの「仮想マシン>設定」から「一般」を選択して「OS」の項目を「Hyper-V(サポートなし)」に設定します。

スクリーンショット 2014-04-20 22.02.24

 

また、「プロセッサとメモリ」の「詳細オプション」にて「この仮想マシンのハイパーバイザーアプリケーションを有効にする」にチェックが入っていることを確認してください。この設定を行うことでWindows8.1の「コントロールパネル>プログラム>Windowsの機能の有効化または無効化」にて「Hyper-V プラットフォーム」がインストール可能となります。

スクリーンショット 2014-04-20 22.08.18

 

後は通常通りHyper-VにてゲストOS(私の場合はWindows7なので以後はWindows7と言います)を「新規>仮想マシン」でインストールします。

さて、Windows7のインストールが完了したらDebugできるようにするおまじないな設定をします。「Windowsキー+R」で「msconfig」と入力してmsconfigを立ち上げる。ここで「ブート」タブの詳細設定にて「デバッグ」にチェックを入れます(他はいじらない)。ここでいったんWindows7にはシャットダウンで眠ってもらいます。

スクリーンショット 2014-04-20 22.16.50

Hyper-Vの設定に戻って仮想シリアルポートの設定を行います。DebuggerとDebuggeeを繋ぐ要!仮想マシンの設定にて「COM1」という設定項目があるので、そこの設定を以下の図のように「名前付きパイプ」で「Debug」(この名称は任意)と設定。ここで表示される「名前付きパイプのパス」を使うのでメモっておきます。

スクリーンショット 2014-04-20 22.20.32

 

いよいよKernel Debugを実行することが可能になります。Windows7を立ち上げます。そしてHostであるWindows8.1側にてWinDbgを管理者権限で立ち上げます。「Ctrl + k」でKernel Debuggingのダイアログを開いて、以下のように設定。Portで先ほどの名前付きパイプのパスを使うのです。

スクリーンショット 2014-04-20 22.25.14

 

OKを押下するといよいよ開始!

スクリーンショット 2014-04-20 22.26.43

 

と、思ったら「Waiting to reconnect…」って表示されたままだしステータスバーには「Debuggee not connected」って書いてあるしで、何か設定を間違えたのかな?とここで無駄に(?)かなり悩んでしまいました。

が、breakで介入しないと何も始まらないんですね。本当に初心者なのでさっぱりわかっていませんでした(お恥ずかしい)。ということで「Debug > Break」を実行するとこんな感じ↓↓↓

***************************
* *
* You are seeing this message because you pressed either *
* CTRL+C (if you run kd.exe) or, *
* CTRL+BREAK (if you run WinDBG), *
* on your debugger machine’s keyboard. *
* *
* THIS IS NOT A BUG OR A SYSTEM CRASH *
* *
* If you did not intend to break into the debugger, press the “g” key, then *
* press the “Enter” key now. This message might immediately reappear. If it *
* does, press “g” and “Enter” again. *
* *
***************************
nt!DbgBreakPointWithStatus:
fffff800`026c17a0 cc int 3
kd> k
Child-SP RetAddr Call Site
fffff800`00b9ca78 fffff800`026912c3 nt!DbgBreakPointWithStatus
fffff800`00b9ca80 fffff800`02624090 nt!FsRtlCheckLockForReadAccess+0x1833
fffff800`00b9cb80 00000000`00000000 0xfffff800`02624090

おぉ、なんだかとてもそれっぽいことになりましたし、しっかりとTarget Machineに対してBreak-inできたみたいです。超絶に遅いペースですが、一応前進はできています。

Written on April 20, 2014
このエントリーをはてなブックマークに追加