使用pae分页时的线性地址转换

时间:2015-11-18 17:03:39

标签: c x86 paging kvm page-tables

我正在尝试从虚拟机管理程序级别遍历(和打印)进程分页结构。我正在运行的guest是32位操作系统(ubuntu 12.04),它使用PAE(物理地址扩展)分页。

以下来自intel手册的图片显示了使用PAE分页时不同结构的详细信息

PAE = 1

我对如何使用这些信息感到困惑:

要访问不同的PDPTE:我应该使用CR3 + i(包括忽略的位)还是将CR3右移4,然后添加偏移量(CR3 >> 4) + i

类似地,对于来自PDPTE的页面目录的地址,我理解我应该从条目及其40位(12:51)中排除标志。但是,对于所有PDPTE,我只得到0个PDE(我使用CR3 + i)... 我使用kvm_read_guest(vcpu->kvm, cr3 + i, &pdpte, 8)读取PDPTE,kvm_read_guest(vcpu->kvm, (pdpte >> 12) + i, &pde, 8)读取PDPTE中的PDE

如果有人对此有任何解释,我将非常感谢:)

0 个答案:

没有答案