2

GDBのようなデバッグ機能は、eflagsレジスタのTFフラグを設定することで機能します。これにより、プロセッサによる命令の実行ごとに例外が発生します。同じことを行うためにkvmの場合に仮想マシンExを実行しているときは、MONITOR TRAP FLAG(現在のIntelソフトウェアマニュアル3cの15ページ)と呼ばれるフラグを設定する必要があります。これにより、仮想マシンが終了します(VMEXIT)ハイパーバイザーに熱心にデバッグを与えるすべての命令の後。

BTF(ブランチトラップフラグ)を設定する必要があるという問題に直面しています(PG 689 vOLUME 3a INTELソフトウェアマニュアル)。通常のシナリオでは、これによりすべての分岐命令でDEBUG EXCEPTIONが発生しますが、VMでこれを実行したいので、VMCSでどのビットを設定するかがわかりません。シングルステッピングの場合のように、これを直接行う方法はないようです。他の手段を使って同じことをする方法があれば、誰か教えてもらえますか?

4

1 に答える 1

1

BTFフラグはVMCSにありません。IA32_DEBUGCTLMSRにあります。VMエントリの前にwrmsrを実行して、明示的に設定する必要があります。KVMの場合、これをvmx_vcpu_runに追加できます。

すべてのデバッグ例外に対してVMを終了させるには、VMCSで例外ビットマップのビット1を設定します。VMの終了を引き起こしたデバッグ例外に関する情報は、VMCSの終了資格フィールドに保存されます。ハイパーバイザーは、デバッグ例外自体を処理するか、ゲストに注入することができます。

于 2018-01-09T20:12:01.413 に答える