汇编学习笔记(19) - 内存分段模式的总结
基本总结
1. 保护模式采用 [ 选择子 : 偏移地址] 的方式寻址,选择子包含 特权级 表选择 和表索引三部分,表选择只能是 GDT 和LDT 二选一
2. 表中存储着 存储段的段地址 也存储着称之为门和系统结构的数据,通过这些数据可以二次寻址,二次寻址是CPU自动完成的
3. 门 内存储着选择子和偏移 ,所以门也是通过 [ 选择子 : 偏移地址] 二次寻址的,二次寻址仍然需要指向 表中的 存储段
4. 存储段包括 数据段和代码段
5. 代码段分两种 一致代码段 非一致代码段,他们的权限要求稍有区别
6. 函数的调用可以直接指向 表中的代码也可以指向表中的各种门,然后通过各种门二次寻址
7. 特权提升的调用都需要通过门来实现,而提升特权后的运行位置由门决定,所以用户代码没有权利随意决定高特权运行的代码
各种调用途径和特权级的总结
1. RPL只在主动调用阶段有用,比如通过 CALL JMP INT 的调用,之后通过门在调用实际代码的时候CPU会将门中RPL直接设为0,相当于RPL没有意义了
2. 所有提权路径的最终目的地都是非一致代码
3. 正向调用只能提权不能降权,返回调用只能降权不能提权
4.书中说一致代码段只能向本层或内层调用,不能向外层调用。这里指的应该是CPL所在层级而非代码所在层级,也就说只要CPL层级确定了,高层级的一致代码也是可以调用低层级的,比如说 CPL=3 那么实际上 DPL=0的一致代码也可以调用 DPL=2的一致代码,但是应该不推荐吧。
5. 不提权的情况下权限, 即CPL是不变的
门要求 CPL < DPL, RPL< DPL
一致代码段要求: CPL >= DPL
非一致代码段: CPL = DPL
那么,此时可以调用相对于CPL来说 外层的门 本层的非一致代码 本层或内层的一致代码
其他总结