特权级 深入浅出

特权级:0,1,2,3级。0级的特权级最高。
特权级转移:
- 由中断门,调用门等手段实现由低特权级向高特权级转移
- 调用返回指令,这是唯一一种能降低特权级的情况
当处理器从低特权级向高特权级转移时,会自动的把当时低特权级的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中不能主动调用。
- 调用门:call jmp 后接调用门选择子。call 可以实现从低特权级向高特权级转移,jmp 只能是平级转移。
- 中断门:int 指令发中断。
- 陷阱门
- 任务门
门的作用相当于蹦床。人站在台子上,往蹦床上跳,人会被弹的比台子还高。台子的高度介于蹦床和目标高度之间。
门槛是访问者的下限,访问者的特权级不能低于门描述符的特权级,否则连门都进不去,门框是访问者特权级的上限,访问者的特权级不能高于门描述符中目标所在代码段的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。
- 非一致性代码段:要求CPL=RPL=DPL
- 一致性代码段:CPL>=DPL && RPL >=DPL
- 数据段:CPL<=DPL && RPL <=DPL
- 调用门:DPL_GATE>=CPL>=DPL_CODE && RPL<=DPL_GATE
完结。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构