简述RPL, DPL, CPL的区别与联系

简述RPL, DPL, CPL的区别与联系

基本概念

RPL: Requested Privilege Level, 请求特权级
DPL: Descriptor Privilege Level,描述符特权级
CPL: Current Privilege Level,当前特权级

区分RPL和CPL

可能有很多博客或者文章上面都有讲到RPL和CPL,那么这两者到底有什么区别和联系呢:
1. RPL存在于段选择子(Segment Selector)中,CPL存在于段寄存器中,如(CS, SS, DS)
2. RPLCPL都占用2个bit, 取值范围0~3, 值越小,特权级越高
但是问题又出现了,段选择子与段寄存器之间又有什么关系呢?
看下面的代码,你可能就比较清楚了:

lgdt gdtdesc
movl %cr0, %eax
orl $CR0_PE_ON, %eax
movl %eax, %cr0
ljmp $PROT_MODE_CSEC, $protcseg

上面的这一段代码的主要作用是从实模式切换到保护模式,其中$PROT_MODE_CSEC就是段选择子。
ljmp在跳转时会把段选择子赋值给段寄存器。这样,你应该清楚它们之间是什么关系了吧。

RPL, CPL与DPL实现数据段保护

DPL存在于段描述符(Segment Descriptor)中,代表着要访问当前数据或者是代码段所需要的特权等级。
CPL是当前代码的特权级,RPL是你请求的特权级,简单的说,只有当max(RPL, CPL) <= DPL时,访问才能成功.
例如:

DPL = 2, CPL = 0, RPL = 3, 访问失败
虽然当前所有的特权级CPL很高,但RPL很低,就像你是level 1的,你偏要告诉别人你是level 3的,那当然没人买你的帐。

另外简单说段选择子的结构:

Bit 0 ~ Bit 1:  RPL
Bit 2:          TI(Table indicator), 0-GDT, 1-LDT
Bit 3 ~ Bit15:  Index of table
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值