博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DPL, CPL及RPL之间的关系
阅读量:5819 次
发布时间:2019-06-18

本文共 1023 字,大约阅读时间需要 3 分钟。

DPL: Descriptor Privilege Level

1) GDT/LDT表中的描述符

GDT/LDT表中的描述符,描述的是一段内存。

 

其中的DPL代表着GDT/LDT中的描述符描述的内存段的特权级别。

比如,当前正在执行的代码,它的特权级别就是当前的CS段选择子指向的段描述符中的DPL所决定的。

即DPL是描述一段内存的特权级别。

 

2) IDT表中的描述符

IDT表中的描述符,描述的是一个门。

门的概念,与“植物大战僵尸”里面的传送门类似:

 

 

假设,上图中的每一行都是有特权级别的,上面行的特权级别比下面行的特权级别高,那么从A处发出的豌豆是无法打中B处的僵尸的。

但是有了传送门,它可以帮忙将A出打出的豌豆提升到B处,从而打中B处的僵尸。

 

Gate Descriptor的作用也类似,它可以用来帮助提升请求请求代码的特权级别。

使原本没有特权执行内核态代码的用户态程序,可以在Gate的帮助下,执行内核态的代码。

 

 

CPL:Current Privilege Level

代表着当前执行的代码段的特权级别

 

RPL:Request Privilege Level

用于描述段选择子。

 

段选择子是用来选择GDT/LDT中段描述符描述的内存段的。

 

RPL代表着一次申请访问估内容时,使用的特权级别,用RPL来代替请求程序本身的CPL,用于特权级别检查。

 

下面我们查看一个例子:

IDT中第0x80项代表“系统调用”的入口:

1: [  80] 0x00000060[index=000C, TI=0, RPL=0] : 0xc152c898, P[1] DPL[3] Type[       Trap Gate]

而它里面的0x00000060段选择子,选择的是GDT中的0x000C项

1: [   C] 0x00000000 : 0xffffffff, G[1] D/B[1] P[1] DPL[0] S[1] Type[11] Code[Read-Enable Accessed ]

根据这个例子,我们可以理解为

1) 用户态程序的CPL为3, 它请求的Gate描述符项的DPL为3,请求通过。

2) Gate描述符进一步代表用户态程序请求访问内核态的代码段时,RPL为0, 而目标代码段的DPL也为0,这一步请求也通过。

转载于:https://www.cnblogs.com/long123king/p/3501554.html

你可能感兴趣的文章
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
《Linux内核修炼之道》 之 高效学习Linux内核
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
让前端小姐姐愉快地开发表单
查看>>
Web前端JQuery入门实战案例
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
iOS \U7ea2 乱码 转换
查看>>
FCN图像分割
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
数据库事务隔离级别
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
kali linux 更新问题
查看>>
HDU1576 A/B【扩展欧几里得算法】
查看>>
廖雪峰javascript教程学习记录
查看>>