x86 几个特权级别(CPL,RPL,DPL)

在阅读linux内核的时候,在linux内核的权限保护机制部分,经常会讨论几个特权级别:CPL,RPL,DPL。下面简单讲一下我自己的理解。

背景知识:
1 x86体系结构的几个段寄存器:cs,ds,es,ss.fs.gs
它们无论在实模式下还是保护模式下,都是16位的寄存器,只是功能不而已。
实模式下: 用做段寄存器,用来将逻辑地址转换到线性地址
保护模式下:段选择子,用来作为索引在GDT表或LDT表等中选择段描述符。
主要内容:
1 段选择子基本结构:
   index    TI      RPL
   13bit    1bit    2bit
因此,段选择子中最低2bit叫做RPL.
作为段选择子的时候,cs和ss比较特殊,它们的RPL代表着当前进程的特权级,因此,二者的RPL又叫CPL。
DPL就不用多说了,段描述符表中的两位。
2 举个例子
mov $0, offset(%ds)
这条指令的地址cs:ip, 那么cs中的最低两位就是cpl,即执行这条指令的当前特权级。
现在要将0写入某个地址,那么就要去查看有没有权限写入,首先检查的就是%ds中的rpl,然后再去检查%ds索引的段描述符中的dpl。假设当前cpl=0, %ds中的rpl =1, 段选择子中的dpl=3,那么cpl的特权级高于dpl,rpl的特权级高于dpl,访问合法。可以这样理解,首先拿当前特权级cpl与段选择子中的rpl比较,得出能不能访问某个段描述符的结论, 然后拿rpl去与段描述符中的dpl比较,就是拿着rpl这个特权级能不能访问实际的段。
cpl先去拿一个特权级别rpl,然后利用取得的这个特权级rpl去访问某个特权级dpl的段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值