特权级 深入浅出

特权级:0,1,2,3级。0级的特权级最高。

特权级转移:

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

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

TSS简介:Task State Segment 

TSS也是一个段,TSS描述符存于GDT表中。

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

104多个字节,由硬件支持的数据结构,TR寄存器缓存了TSS描述符基址,加快了寻址。

其中留有了三个栈。

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

CPL和DPL入门

DPL RPL CPL

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

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

CPL:当前CPU执行的指令的代码段的特权级,当前特权级CPL保存在CS选择子中的RPL部分。

RPL:选择子的低2位。

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

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

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

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

门结构是什么呢?就是记录一段程序起始地址的描述符。8个字节大小,记录了选择子和偏移量。

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

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

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

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

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

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

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

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

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

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

RPL的前世今身

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

  • 比如读文件,要在0特权级下执行,一旦处于0特权级下,就会有至高无上的权力,可以进行硬盘读写。就像用户让操作系统作为代理去读硬盘。如果用户有非法企图,将参数--缓冲区所在的数据段的选择子用内核的选择子替代!!!就会破坏内核。
  • 又或者某个调用门实现类似memcopy的功能,将数据源的选择子用内核的选择子替代,这等于内核完全暴露。

问题本质:检查特权级的时候检查了代理,没有检查实际请求者

RPL提供了解决方案,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

完结。

posted @   stu--wy  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示