ハイパーバイザー レベルからプロセス ページング構造をウォークスルー (および印刷) しようとしています。私が実行しているゲストは、PAE (物理アドレス拡張) ページングを使用する 32 ビット OS (ubuntu 12.04) です。
Intel マニュアルの次の図は、PAE ページングを使用する場合のさまざまな構造の詳細を示しています。
これらの情報の使用方法について混乱しています。
異なる PDPTE にアクセスするには、CR3 + i
(無視されたビットを含めて) 使用するか、CR3 を 4 だけ右にシフトしてからオフセットを追加する必要があり(CR3 >> 4) + i
ますか?
同様に、PDPTE からのページ ディレクトリのアドレスについては、エントリとその 40 ビット (12:51) からフラグを除外する必要があることを理解しています。ただし、CR3 + i
すべての PDPTE に対して 0ed PDE (使用したもの) しか得られません ... 以前kvm_read_guest(vcpu->kvm, cr3 + i, &pdpte, 8)
は PDPTE をkvm_read_guest(vcpu->kvm, (pdpte >> 12) + i, &pde, 8)
読み取り、PDPTE から PDE を読み取っていました。
誰かがこれについて何か説明があれば、私はとても感謝しています:)