4段权限等级

CPL(Current Privilege Level)

CPL是当前正在执行代码的特权级别。x86处理器使用CPL来决定对内存和其他系统资源的访问权限。
CPL在x86架构的处理器中存储在代码段寄存器(CS)的最低两位中。CS寄存器是代码段选择子的一部分,它包含了代码段的描述符索引和当前执行代码段的特权级别(CPL)。
CPL的取值范围是0到3,0表示最高特权级别,3表示最低特权级别。
通常,内核态运行的代码(例如操作系统内核)具有最高特权级别(CPL为0),而用户态程序具有较低特权级别(CPL为3)。

DPL(Descriptor Privilege Level)

DPL是存储在段描述符中的字段,用于指示段的特权级别。
在保护模式下,段描述符包含了段的访问权限信息,包括基地址、段限制和特权级别等。
DPL的取值范围也是0到3,与CPL相同。
当程序试图访问一个段时,CPU会根据该段的DPL和CPL来确定是否允许访问。

RPL(Requested Privilege Level)

RPL是在访问一个段时,由选择子(Selector)中的字段提供的请求特权级别。
选择子是段选择器(Segment Selector),由段寄存器(如CS、DS、ES等)中的内容构成。
RPL允许程序在不同特权级别之间进行切换。当程序在低特权级别(例如用户态)下尝试访问一个高特权级别(例如内核态)的段时,它可以通过设置选择子的RPL来请求权限。
当RPL大于或等于段描述符中的DPL时,访问将被允许,否则将会导致异常。

RPL 是段寄存器(段选择子)的低2位
在这里插入图片描述
DPL 是段描述符 高32位的第13-14位

CPL 是CS段寄存器的低2位

普通数据段: DS,ES,FS,GS. 堆栈数据段 SS

代码段 CS

CPU执行代码通过 cs段基址加上eip去地址读取指令执行

普通数据段 使用段描述符寻址时,先比较段选择子的RPL(请求特权级别)与段描述符的DPL(段特权级别)如果RPL小于等于DPL,再比较 CPL(当前特权级别) 与DPL(段特权级别),如果CPL也小于等于DPL那么就可以通过段描述符寻址。如果CPL或RPL有一个大于DPL那么就表示权限不够不能通过段描述符寻址。

普通数据段 使用段描述符寻址时,RPL>=DPL && CPL>=DPL才能够访问。

堆栈段使用段描述符寻址时 RPL=CPL= DPL才能够访问。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值