首页 > 其他分享 >特权级深入浅出--精讲

特权级深入浅出--精讲

时间:2022-12-03 17:46:41浏览次数:51  
标签:调用 CPL -- 精讲 深入浅出 代码段 RPL DPL 特权

特权级:0,1,2,3级。

每个任务的每个特权级下只能有一个栈,一个任务最多有四个栈对应四个特权级。

特权级转移:

  1. 由中断门,调用门等手段实现由低特权级向高特权级转移
  2. 调用返回指令,这是唯一一种能降低特权级的情况

当处理器从低特权级向高特权级转移时,会自动的把当时低特权级的SS 和 ESP 压入 转移后的高特权级的栈中,最后可以实现“向外层转移”。

TSS简介:Task State Segment 

104多个字节,由硬件支持的数据结构,由TR寄存器加载的(类似于基地址)。

其中留有了三个栈。

--------------------------------------------------------------------------

CPL和DPL入门

DPL RPL CPL

处理器的当前特权级是CS寄存器中的选择子的低2位的值,CS.RPL

DPL:段描述符寄存器中的特权级。

CPL:当前CPU执行的指令的代码段的特权级。

RPL:选择子的低2位。

访问者是代码段中的指令,DPL是段描述符所在内存区域的门槛权限。

  • 对于受访者为数据段:只有访问者的权限大于等于该DPL表示的最低权限才能够访问。
  • 对于受访者为代码段:只有访问者的权限等于该该DPL才能访问,只能平级访问。

一致性代码段:如果自己是转移后的目标段,自己的特权级一定要大于等于转移前的CPL。在数值上CPL>=一致性代码段的DPL。规定了上限。转移后并不会将CPL用该目标段的DPL替换。低特权级访问到了高特权级的代码。

--------------------------------------------------------------------------

四种门:任务门,中段门,陷阱门,调用门。

进入了这种神奇的门,处理器便能转移到更高的特权级上。

除了任务门,其他三种门都对应了一段例程,而不像段描述符对应的是一片内存区域。这三种门里面记录了选择子和偏移量。调用门和任务门描述符存于GDT中。中断门,陷阱门存于IDT中不能主动调用。

  1. 调用门:call jmp 后接调用门选择子。call 可以实现从低特权级向高特权级转移,jmp 只能是平级转移。
  2. 中断门
  3. 陷阱门
  4. 任务门

门的作用相当于蹦床。人站在台子上,往蹦床上跳,人会被弹的比台子还高。台子的高度介于蹦床和目标高度之间。

门槛是访问者的下限,访问者的特权级不能低于门描述符的特权级,否则连门都进不去,门框是访问者特权级的上限,访问者的特权级不能高于门描述符中目标所在代码段的DPL。

进门之后将目标代码段DPL作为CPL,“一步登天啦”!

调用门的时候会涉及到特权级的转换所以要实现一些传参数,压栈操作,旧栈新栈等。

返回时要检查数据段寄存器,如果某个寄存器中选择子对应的DPL权限比返回后的CPL高,将其填充0,引发异常。禁止用户可能访问到内核读数据段。

--------------------------------------------------------------------------

RPL的前世今身

仅靠CPL和DPL存在潜在的危险。

  • 比如读文件,要在0特权级下执行,如果用户有非法企图,将参数--缓冲区所在的数据段的选择子用内核的选择子替代!!!就会破坏内核。
  • 又或者某个调用门实现类似memcopy的功能,将数据源的选择子用内核的选择子替代,这等于内核完全暴露。

RPL提供了解决

CPL和RPL不一定是对某一个程序而言的。

以后再请求某特权级为DPL的资源时,要求:CPL和RPL的特权级要同时大于等于受访者的特权DPL。CPL<=DPL && RPL <=DPL

RPL代表了真正请求者的特权级。如果用户提供了选择子作为参数,选择子中的RPL会被替换为用户进程的CPL。

  1. 非一致性代码段:要求CPL=RPL=DPL
  2. 一致性代码段:CPL>=DPL && RPL >=DPL
  3. 数据段:CPL<=DPL && RPL <=DPL
  4. 调用门:DPL_GATE>=CPL>=DPL_CODE && RPL<=DPL_GATE

完结。

标签:调用,CPL,--,精讲,深入浅出,代码段,RPL,DPL,特权
From: https://www.cnblogs.com/wuyun--wy/p/16948186.html

相关文章

  • tomcat_安装&卸载&启动与tomcat_启动问题分析
    tomcat_安装&卸载&启动tomcat:web服务器软件1.下载:https://tomcat.apache.org/      ......
  • 郭东白的架构课00012
    你好,我是郭东白。前四条法则分别讲了目标、资源、人性和技术周期,这些都与架构活动的外部环境有关。那么今天我们来讲讲在架构活动内部,也就是在架构师可控的范围内,应该遵......
  • 郭东白的架构课00014
    你好,我是郭东白。架构师通常并不管理团队,而是管理架构活动。更准确地说,是定义和引导架构活动。因为每个参与架构活动的个体,都有各自工作的优先级和汇报关系。因此在没有管......
  • Vue 中 props配置项
    Vue中props配置项1:props配置项说明<!--##props配置项1.功能:让组件接收外部传过来的数据2.传递数据:```<Demoname="xxx"/>```3.接收数据:1.第一种方式(......
  • 郭东白的架构课00013
    你好,我是郭东白。上节课我们讲了外部适应性这个概念,也强调了架构师的职责是通过架构活动为企业不断注入外部适应性,从而帮助企业更好地实现它的战略意图。那么该怎么注入......
  • 郭东白的架构课--加餐0001
    你好,我是辰洋,是《郭东白的架构课》的负责人。这是我们在这个专栏的第一次正式会面,你可能会觉得与我有些陌生。不过从我的眼光来看,对于专栏里的每一行字、每一个案例,对于在......
  • 郭东白的架构课00015
    你好,我是郭东白。到这里,我们就完成了模块一的学习。那么这节课,我就以一个更宏观的视角来总结一下整个模块的思路,帮助你更好地理解与吸收。过程正义:为什么要定义生存法则?......
  • IDEA编辑器环境配置
    这里使用IDEA的版本是2018.1.1,有版本需要的可以去官网下载。IDEA环境搭建添加Lua插件双击打开IDEA编辑器,然后找到最下面的configure。打开后点击Plugins。在搜索栏......
  • CentOS7 加阿里yum源
    CentOS系统更换软件安装源第一步:备份原镜像文件,以免出错后可以恢复。cp-r/etc/yum.repos.d//etc/yum.repos.d.bak/第二步:下载新的CentOS-Base.repo到/etc/yum.repos.......
  • 判断二叉树是否为满二叉树
    判断二叉树是否为满二叉树作者:Grey原文地址:博客园:判断二叉树是否为满二叉树CSDN:判断二叉树是否为满二叉树满二叉树定义一个二叉树,如果每一个层的结点数都达到最大值......