// we only consider x86 w/o pae static void dump_guest_pgtable(CPUX86State *env) { int i, j; target_ulong pde_addr, pte_addr; target_ulong phyaddr, phyaddr2; uint32_t pde, pte; pde_addr = (env->cr[3] & ~0xfff) & env->a20_mask; // first level page directory, iterate pde for (i = 0; i < NUM_ENTRY; ++i) { phyaddr = (pde_addr + i * 4) & env->a20_mask; pde = ldl_phys(phyaddr); pd[i] = pde; if (!(pde & PG_PRESENT_MASK)) continue; pte_addr = (pde & ~0xfff) & env->a20_mask; // second level page table, iterate pte for (j = 0; j < NUM_ENTRY; ++j) { phyaddr2 = (pte_addr + j * 4) & env->a20_mask; pte = ldl_phys(phyaddr2); if (!(pte & PG_PRESENT_MASK)) pt[i][j] = 0; pt[i][j] = pte; } } }