首页
社区
课程
招聘
[原创]分页模式之我见(简述)
2021-6-28 14:22 3757

[原创]分页模式之我见(简述)

2021-6-28 14:22
3757

前言

本文是对前两天发的帖子《物理地址、线性地址、逻辑地址之我见》的补充。如有谬误,敬请指正!

基本概念

分页模式从推出至今已有四种模式:32-bit、PAE、4-level 和 5-level。每种模式都与物理地址和线性地址的宽度息息相关。下表截取自 Intel 手册

分页模式 线性地址位宽 物理地址位宽 页面大小
None 32 32 N/A
32-bit 32 40 4 KB / 4 MB
PAE 32 52 4 KB / 2 MB
4-level 48 52 4 KB / 2 MB / 1 GB
5-level 57 52 4 KB / 2 MB / 1 GB
 

上表中物理地址位宽仅为参考值,具体值由 MAXPHYADDR 决定,如何获取 MAXPHYADDR 详见我的另一篇帖子

格式转换

由于各模式都有两至三种不同大小的页面,因此,线性地址的分割也存在多种格式,虽然如此,但各种格式大同小异。下表简略说明了各格式:

分页模式 PML5E PML4E PDPTE PDE PTE OFFSET 页面大小
32-bit 10 10 12 4 KB
PAE 2 9 9 12 4 KB
4-level 9 9 9 9 12 4 KB
5-level 9 9 9 9 9 12 4 KB
 

上表仅列举了不同宽度线性地址分割 4 KB 页面的情况,其他尺寸页面的分割只需将 OFFSET 的宽度扩大以覆盖掉最近的表项即可。

 

在 32 ~ 57 Bits 的线性地址中存在 2 ~ 5 个表,每个表占 4 KB 物理地址,因此,每个表中可存放 1024/512 个表项(4096÷4/4096÷8),唯独 PAE.PDPTE 例外。

 

顶级表的入口地址总是存在于 CR3 寄存器中。

线性到物理

不知道,各位看官有没有发现,物理地址和线性地址的宽度总是不一样的,也就是说并非一一对应,该死的牙膏厂(Intel)!一次性都 64 Bits 就没有这么麻烦了。

 

我在早先学习分页时,就被两个地址宽度不一的问题,困扰了很久。后来几经磨砺,才渐渐的明白了其中原委。其实很简单……由于各个表项都是可编程的,管理地址空间的软件(OS),只要不分配或动态调整超出范围的地址即可。

结语

整体而言,分页模式依据线性地址位宽区分,可归纳为两大类 32/48+,其他都是子集而已。

 

同时,本文并未对每种表的属性,以及,各模式的开关和切换做任何说明,原因有三:1、太麻烦……;2、一些属性我也不清楚具体何用;3、作为入门,以上内容够用,毕竟不是人人都写操作系统。


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2021-6-28 14:23 被khristian编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回