CPL, 门DPL, 描述符DPL 的关系
2017-10-26 23:21
323 查看
1. CPL要通过门(中断门,陷阱门,任务门,调用门)访问一个GDT中的描述符,必须有如下关系:
CPL <= DPL (门): 当前运行级不能低于门,如果是外部中断或CPU异常会免去这一判断
CPL >= DPL (描述符):门只能是用于保持或提升运行级别,因此GDT的描述符中的DPL均为0。如果有提升,则需要进行堆栈切换,如下:
运行级别不变的堆栈值:
eflag
cs
eip
error code
运行级别改变的堆栈值:
ss
esp
eflag
cs
eip
error code
2. 各个门的DPL解释:
中断门: 用于硬件中断,DPL为0,不允许用户态直接使用int指令访问,硬件中断免去这一判断,因此可以在用户态响应中断,见set_intr_gate
DPL0陷阱门: 用于CPU异常,DPL为0,不允许用户态直接使用int指令访问,硬件中断免去这一判断,因此可以在用户产生CPU异常,见set_trap_gate
DPL3陷阱门: 用于系统调用,DPL为3,允许用户态直接使用int指令访问,这样才能通过int80访问系统调用,只有80号向量属于此门,见set_system_gate
调用门: DPL为3,允许用户态访问,和LDT一起使用,用于特殊场景,见set_call_gate
CPL <= DPL (门): 当前运行级不能低于门,如果是外部中断或CPU异常会免去这一判断
CPL >= DPL (描述符):门只能是用于保持或提升运行级别,因此GDT的描述符中的DPL均为0。如果有提升,则需要进行堆栈切换,如下:
运行级别不变的堆栈值:
eflag
cs
eip
error code
运行级别改变的堆栈值:
ss
esp
eflag
cs
eip
error code
2. 各个门的DPL解释:
中断门: 用于硬件中断,DPL为0,不允许用户态直接使用int指令访问,硬件中断免去这一判断,因此可以在用户态响应中断,见set_intr_gate
DPL0陷阱门: 用于CPU异常,DPL为0,不允许用户态直接使用int指令访问,硬件中断免去这一判断,因此可以在用户产生CPU异常,见set_trap_gate
DPL3陷阱门: 用于系统调用,DPL为3,允许用户态直接使用int指令访问,这样才能通过int80访问系统调用,只有80号向量属于此门,见set_system_gate
调用门: DPL为3,允许用户态访问,和LDT一起使用,用于特殊场景,见set_call_gate
相关文章推荐
- CPL, 门DPL, 描述符DPL 的关系
- DPL,RPL,CPL关系详解
- 详解 RPL、DPL、CPL 的关系
- 不同特权级代码段之间的跳转(CPL DPL RPL之间的关系)
- DPL, CPL及RPL之间的关系
- CPL、RPL、DPL的区别
- USB入门系列之六 —— USB的描述符及各种描述符之间的依赖关系(zz)
- (第三章 8 )特权级——保护模式的特权级检查(DPL,RPL,CPL, 一致代码段,非一致代码段)
- 一个操作系统的实现:关于CPL、RPL、DPL
- ios开发证书,描述文件,bundle ID的关系
- 关于JsonStore中数据和字段关系的描述
- X86之操作系统之DPL,RPL,CPL的区别与联系
- 杨辉三角写法(可用来描述组合关系)
- linux操作系统CPL、DPL、RPL说明
- 保护模式 对CPL,RPL,DPL 的总结
- 保护模式 对CPL,RPL,DPL的总结
- CPL DPL RPL的区别 &&一致性代码段和非一致性代码段
- UML描述对象和类之间的相互关系
- 再次理解保护模式特权级——CPL、DPL、RPL、数据段、堆栈段、一致代码段、非一致代码段
- Hibernate 表关系描述之ManyToMany