これは私のセットアップです:
VM 内のユーザー空間プログラムで、値が「8」の変数をアドレス bf9ee1a0 に保存します。
vm 内のカーネル空間で virt_to_phys 関数を呼び出すと、アドレスに対応する ff9ee1a0 の物理アドレスを取得します。
qemu では、pte と pte_addr はそれぞれ a5913865 と bf955f78 です。x86_cpu_handle_mmu_fault 関数を使用し、特定の printf ステートメントを追加しました。私の理解では、os と qemu のマッピングは同じでなければなりません。つまり、bf9ee1a0 は a5913865 にマップする必要があります。
ここには多くのレベルの翻訳が関係していることを私は知っています。ゲスト仮想 — ゲスト物理 — ホスト仮想。
ここに私の質問があります: 1. データが実際に保存されている場所を知りたいですか?
では、virt_to_phys() は何を意味するのでしょうか?
制御レジスタで使用されるアドレスが、vm 内の os とページング用の qemu の両方で同じであることを確認しました。では、なぜこの不一致が生じるのでしょうか。
pte が qemu に持っているページの内容を印刷する必要がある場合、どのように printf ステートメントを使用してそれらを印刷しますか?
どんな洞察も大歓迎です。