特权级转移 之 保护模式下代码段(一致性代码段 非一致性代码段)特权级保护依据

本文详细探讨了在保护模式下代码段之间的跳转规则,特别是特权级切换。非一致性代码段仅支持同级转移,而一致性代码段允许低特权级到高特权级的跳转,但CPL特权级不会改变。实验展示了如何通过直接跳转实现这些转换,验证了特权级管理和代码段切换的机制。内容涉及GDT、段描述符、CPL、DPL和RPL等概念。

提炼:

可以 不使用 调用门(低特权级跳转到高特权级) 和 TSS任务状态段(高特权级跳转到低特权级) 的情况下 做代码段之间的跳转(特权级切换),所使用的就是保护模式下对于代码段特权级保护的依据,即 一致性代码段 与 非一致性代码段的规则。

1 对于非一致性代码段,只能同级转移
其他同特权级代码段(不限一致或非一致) -----跳转到—> 当前非一致性代码段

2 对于一致性代码段,支持低特权级到高特权级一致性代码段的转移,但是!!! 但是转移之后 CPL不变!!!
正常通过调用门跳转到高特权级,代码段CPL 会被赋值为当前内存段的DPL ,但是 这里 对于一致性代码段,不适用!!!

其他低(同)特权级代码段 -----跳转到—> 当前高特权级一致性代码段

3 特权级降低转移到时候,即执行 retf指令的时候,会触发处理器会对栈段特权级的检查,直接通过选择子中的RPL 进行检查,具体就是 SS的选择子请求特权级RPL 要等于 代码段的选择子请求特权级RPL

4 一致性代码段可以直接跳转到其他同级非一致性代码段执行
一致性代码段与非一致性代码段 中的代码没有本质区别,这两种代码段仅仅是跳转时使用的合法性判断规则不同,因此,一致性代码段到非一致性代码段的直接同级跳转是合法的

在这里插入图片描述
系统段与非系统段的区分就是看 段描述符内存结构中 高32位的第12位,注意这里所说的系统段与非系统端 指的并不是操作系统,而是处理器本身,比如系统段 具体一点就是 局部段描述附表,TSS任务状态段等,特点就是 处理器需要他们来完成一些关键的功能,如 LDT与TSS是多任务实现的基础,因此他们是系统段

而非系统段 指的就是通常定义的 代码段与数据段,对于代码段而言,又分为 一致性代码段与非一致性代码段


段描述符内存结构中 Type字段: 高32位的第8 - 11 位,判断是不是一致性代码段就是 C位的值

在这里插入图片描述

这里的跳转不借助于 调用门描述符!!!

一致性代码段与非一致性代码段 之间的差异 主要体现在代码段之间进行跳转的时候

如果想要跳转到非一致性代码段,必须满足 一下两个条件:
CPL == DPL 当前代码段可执行特权级 == 目标内存段特权级
RPL <= DPL 目标内存选择子请求特权级要高于目标内存特权级
即平级跳转

如果想要跳转到 一致性代码段,那么就只支持从 低(同)特权级的代码 向 高特权级的一致性代码段转移,也就是说 成功跳转的条件是 CPL >= DPL, 即当前代码段可执行特权级 低于或等于 目标内存段特权级,表面看,这个是很厉害的,在不借助调用门描述符的情况下,直接从低特权级跳转到高特权级,虽然能直接跳转,但是,但是,但是 跳转后CPL特权级不会发生改变。比如,当前想从特权级为1的代码段 跳转到 特权级为0 的一致性代码段 那么在我们跳转过去之后,CPL并不会自动等于 当前内存段特权级0,而是依旧是1,不会发生变化!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值