我正在尝试从管理程序级别遍历(并打印)进程分页结构。我正在运行的来宾是使用 PAE(物理地址扩展)分页的 32 位操作系统(ubuntu 12.04)。
英特尔手册中的下图显示了使用 PAE 分页时不同结构的详细信息
我对如何使用这些信息感到困惑:
要访问不同的 PDPTE:我应该使用CR3 + i
(包括忽略的位)还是将 CR3 右移 4 位,然后添加一个偏移量(CR3 >> 4) + i
?
同样对于来自 PDPTE 的页面目录的地址,我知道我应该从条目及其 40 位 (12:51) 中排除标志。但是,对于所有 PDPTE,我只得到 0ed 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
如果有人对此有任何解释,我将非常感激:)