rogxo@home:~$

X64分页

cr3=00000000001ad000
gdtr=fffff8003f677fb0

kd> !vtop 00000000001ad000 fffff8003f677fb0
Amd64VtoP: Virt fffff8003f677fb0, pagedir 00000000001ad000
Amd64VtoP: PML4E 00000000001adf80
Amd64VtoP: PDPE 0000000004209000
Amd64VtoP: PDE 000000000420afd8
Amd64VtoP: PTE 00000000042213b8
Amd64VtoP: Mapped phys 0000000005c77fb0
Virtual address fffff8003f677fb0 translates to physical address 5c77fb0.

kd> !pte fffff800`3f677fb0
                                           VA fffff8003f677fb0
PXE at FFFFB158AC562F80    PPE at FFFFB158AC5F0000    PDE at FFFFB158BE000FD8    PTE at FFFFB17C001FB3B8
contains 0000000004209063  contains 000000000420A063  contains 0000000004221063  contains 8900000005C77963
pfn 4209      ---DA--KWEV  pfn 420a      ---DA--KWEV  pfn 4221      ---DA--KWEV  pfn 5c77      -G-DA--KW-V

----------------------------------------------------------------------------------------------------------
9-9-9-9-12分页
四级页表的两种叫法
PXE-PPE-PDE-PTE
PLM4E-PDPTE-PDE-PTE


手动拆分虚拟地址:
kd> .formats fffff800`3f677fb0
Evaluate expression:
  Hex:     fffff800`3f677fb0
  Decimal: -8795029274704
  Octal:   1777777600007731677660
  Binary:  11111111 11111111 11111000 00000000 00111111 01100111 01111111 10110000
  Chars:   ....?g.
  Time:    ***** Invalid FILETIME
  Float:   low 0.904292 high -1.#QNAN
  Double:  -1.#QNAN
  
  
1 1111 0000 = 1f0
0 0000 0000 = 0
1 1111 1011 = 1fb
0 0111 0111 = 77
1111 1011 0000 = fb0

pagedir = CR3 = 00000000001ad000
PLM4E = pagedir + 1f0*8 = 00000000001adf80
PDPTE = *(QWORD*)PLM4E + 0*8 = 0000000004209000
PDE = *(QWORD*)PDPTE + 1fb*8 = 000000000420afd8
PTE = *(QWORD*)PDE + 77*8 = 00000000042213b8
Physical Address = *(QWORD)PTE + fb0 = 0000000005c77fb0