|
前言
全部掩护模式索引链接:掩护模式笔记一 掩护模式介绍
先前学习了段描述符的结构,这次来补充段描述符结构中的DPL(特权品级)相关的内容
段权限检查
CPU权限分级
在补充段权限检查之前,要了解CPU的权限分级
- 处理器的段掩护机制界说了RING0,RING1,RING2,RING3一共4个特权级别
- 大多数现代操作体系将0级用于内核/可执行步伐,将3级用于应用步伐
- 可用于级别n的任何资源也可用于级别0到n,因此特权级别是环
- 当特权较低的进程实验访问特权较高的进程时,将向操作体系报告常规掩护错误异常
- 8086中的实模式步伐在级别0(最高特权级别)上执行,而8086中的假造模式在级别3执行全部步伐
- 多数现代x86内核仅利用两个特权级别,即RING0和RING3
RING0RING1RING2RING3通常用途内核特权代码、特权数据、特权栈特权代码、特权数据、特权栈应用步伐级别最高第二高第三高最低对应层内核层(内核态)应用层(用户态)内核层
在内核模式下,CPU可以执行其体系结构允许的任何操作。可以执行任何指令,启动任何I / O操作,访问任何内存区域,利用特权指令,控制中断、修改页表、访问设备等等
应用层
硬件会对CPU操作施加某些限制。通常,某些指令是不允许的(尤其是那些指令(包罗I / O操作)可能会改变机器的全局状态),某些内存区域无法访问等。CPU的用户模式功能通常是这些指令的子集可以在内核模式下利用,但是在某些情况下,例如非本机体系结构的硬件仿真,它们可能与尺度内核模式下的可用软件有显着差异
应用层切换内核层
应用步伐的代码运行在最低运行级别上ring3上,不能做受限操作
如果要做受限操作,比如要访问磁盘,写文件,那就要通过执行体系调用(函数),执行体系调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到体系调用对应的内核代码位置执行,如许内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换
CPU权限分级的作用
RING设计的初志是将体系权限与步伐分离出来,使之可以大概让OS更好的管理当前体系资源,也使得体系更加稳定
举个很常见的例子:
普通的应用步伐瓦解一样平常是步伐未响应或者停止运行,并不会影响体系的正常运行
但当驱动步伐出现标题后,动辄 BSOD(蓝屏死机)
判断步伐特权级别
了解了CPU的权限分级后,再来了解 如何查看步伐处于几环
这涉及到了CPL(Current Privilege Level) :当前特权级别
CPL是段寄存器CS和SS的段选择子的后两位
在掩护模式笔记三 段描述符和段选择子中已经说明白段选择子的结构
IndexTIRPL含义索引表指示器请求特权品级全称IndexTable IndicatorRequested Privilege Level数据宽度13位1位2位对比可知,当段寄存器为CS和SS时,其段选择子的RPL就是CPL
通过OD附加应用步伐后查看其段寄存器:
段寄存器段选择子(Selector)二进制段选择子二进制RPL十进制RPLES230010 0011113CS1B0001 101111(CPL)3(CPL)SS230010 001111(CPL)3(CPL)DS230010 0011113FS3B0011 1011113根据CS和SS的段选择子可以得到CPL为3,印证了应用步伐的CPU权限分级为RING3
EPL(有用特权级别)
上面提到了CPL(当前特权级别)和RPL(请求特权级别)
所谓的有用特权级别EPL(Effective Privilege Level),顾名思义就是最终的确定可否执行的特权
EPL = max(RPL,CPL)
即 EPL 即是 RPL和CPL的最大值,EPL为RPL和CPL中较低的权限
DPL(描述符特权级别)
关于DPL,在掩护模式笔记四 段描述符结构中已经略微说明白,现在展开细说
DPL的作用
DPL存储在段描述符中,规定了访问该段所需要的特权级别是什么;即 如果想要加载某个段描述符,就必须具备对应的特权级别
DPL权限检查
当加载一个段描述符时,首先CPU要判断其P位(有用位),如果该段描述符有用,则继续举行DPL权限检查
所谓的DPL权限检查 就是 <strong>判断 DPL是否满足:EPL=max(RPL,CPL) |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|