x64四级分页机制

4级分页#

因为硬件限制64位系统只使用64位虚拟地址的低48位,48位虚拟地址被分为9-9-9-9-12,4个9分别表示PML4T,PDPT,PDT,PTT的PFN页帧编号(与物理页帧区分)

PML4T,PDPT,PDT,PTT的每一项都是8个字节,CR3指向的是PML4T(Page Map Level 4 table)4级页映射表。CR3的35-12位为PML4T物理地址的高24位,低12位置零。

PML4E的35-12位为PDPT页目录指针表物理地址的高24位,低12位置0。

当PDPTE的PS位为1时表示启用1GB(2的 9+9+12=30 次方)大物理页,也就是不会有PDE和PTE了,其35-30位(PFN物理页帧)为物理地址的高6位,低30位置0,对应的页内偏移为9+9+12的值。
当PDPTE的PS位为0时表示不启用1GB的大物理页,其35-12位为PDT的物理地址。

当PDE的PS位为1时表示启用2MB(2的 9+12=21 次方)大物理页,也就是不会有PTE了,其35-21位(PFN物理页帧)为物理地址的高15位,低21位置0,对应的页内偏移为9+12的值。
当PDE的PS位为0时表示不启用2MB的大物理页,其35-12位为PTT的物理地址。

当没有启用1GB和2MB的大物理页时,PTB的35-12位为物理内存的起始地址。

4级分页验证#

运行代码得到szName字符串的虚拟地址为:0x30F640

char szName[0x100] = "Hello World!";
printf("szName:%x\n", szName);

对64位虚拟地址的低48位进行拆分,得到PML4T,PDPT,PDT,PTT的PFN页面帧编号,以及物理地址偏移。

根据对应的规则找到虚拟地址对应的物理地址。

posted @   怎么可以吃突突  阅读(1044)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩