保护模式(二)base、limit、s、type、gb、段权限检查

段选择子结构图

在这里插入图片描述

base、limit、g位

以段选择子0x0023为例
拆分 0000 0000 0010 0011
rpl:3
ti:0
index:4
即查gdt表,第5个段描述符
在这里插入图片描述
接下来拆分 00cff300 0000ffff
顺序为先看p位,再看g位
base:0000 0000 (高32位的两边,跟低32位的左边)
limit:f ffff
g:1 ->limit: f ffff fff
注释:
其中limit前半部分为高32位的16-24位,也是就左边数第二个字节的低一个字节
后半部分为低32位的0-15位,也就是低32位的低两个字节
g位为第23位,找时找高32位的左边数第二个字节的高一个字节是否大于8
若g=1,limit后面补齐三个fff,若为0,limit 前面补齐三个000

p、s、type位

接着上面继续拆
由结构图看出,p位为高32位第15位,即高四字节的左起第一个字节f3->1111 0011
p:1
dpl:3
s:1
type:0011
注释:
p为1表示段描述符可用,dpl权限相关,s为1时此描述符为数据或者代码段描述符,为0位系统段描述符
在这里插入图片描述
当s为1时,查上表确定到底是数据段描述符还是代码段。
上表为type。0011,0为数据段描述符,0向上拓展,1可写,1已访问过,c可执行,r可写

在这里插入图片描述

当e为0时,作图为向上扩展,即可访问范围是base-limit。

D/B位(简单了解即可)

在这里插入图片描述
在这里插入图片描述

段权限

mov ax,000b
mov ds,ax
为例

可以看出 000b,rpl为3,然后需要查询对应段描述符的dpl,cpl需要看cs/ss段寄存器的低两位。
cpl<=dpl 并且 rpl<=dpl

代码段跟系统段描述符检查方式不一样,具体后面学会了再更

思考:既然已经有CPL(当前特权级别)了,为什么还要有RPL(请求特权级别)
回答:我们的程序本可以用“读写”的权限去打开一个文件,但为了避免出错,有些时候我们使用“只读”的权限去打开

发布了7 篇原创文章 · 获赞 0 · 访问量 258

猜你喜欢

转载自blog.csdn.net/weixin_37673331/article/details/104300746
今日推荐