[windows内核]段描述符属性:S位_TYPE域

GDT表里的段描述符可以简单的分成两大类
1.代码或者数据段描述符
2.系统段描述符
怎么区分这个就需要靠S位
在这里插入图片描述

S = 1 代码段或者数据段描述符
S = 0 系统段描述符

我们先说S=1时候的情况,如果S位等于1那么他就是一个代码段或者数据段的描述符,我们怎么快速区分呢
首先,S位在高32位的第5个字节里,也就是和这几个属性看起来是一起的
在这里插入图片描述
在这里插入图片描述
我们首先前提条件就是P位是1,是有效的如果P位和S位都要同时为1那么满足条件的有以下两个(ps:DPL位只能全部为0(访问本段权限0)或者全部为1(访问本段权限3),这个属性以后再解释):
9=1001
F=1111
所以只有快速看高32位的第五个字节就能快速确定是否是有效段,是否是代码或者数据段
如果还想往后分析这个具体是代码段或者数据段就得看TYPE域属性
在这里插入图片描述
如果TYPE域第11位为0那么它就是一个数据段
如果TYPE域第11位为1那么它就是一个代码段
如果是这样,我们也能通过观察来快速确定是否是代码段和数据段
TYPE域在高32字节中的第6位,也就是这里
在这里插入图片描述
如果第11位为1,那第6个字节一定大于等于8它就是代码段,反正如果小于8那它就是数据段
如果是数据段那么它下面三位就代表了它的其他属性,我们一一来拆解
在这里插入图片描述
从表里看它是有四个属性分别是
Read Write accessed expand-down
A位(accessed):访问位,表示该位最后一次被操作系统清理后,该段是否被访问过,每当处理器将该段选择符置入某个寄存器时,就在该位置1

W位(Write):该段描述数据是否可写,如果可写则为1,反之为0

E位(expand-down):扩展方向,如果为1则是向下拓展的数据段,反之则不是,这里的下不是字面意思的下,下面来举个fs段寄存器的例子
在这里插入图片描述
简单的来理解,如果E位为0无效,那么FS段寄存器合法操作的范围就是fs.Base+Limit
如果E位为1有效,那么FS段寄存器合法操作范围就是除去fs.Base+Limit这段范围的其他范围
更简单来说如果E位为1有效那么段描述符的合法操作范围就是取反操作,这样更容易理解
ps:这里段拓展的大小还和DB位有关,但现在不在这里展开说。

如果是代码段
那么它也有四个属性,我们来拆解一下
Read accessed Execute conforming
A位(accessed):和数据段描述一致
R位(Read ):可读位
C位(conforming):一致位,C为1的时候为一致代码段(这里先不展开说)

如果S位是0 那么该描述符就是系统描述符,系统描述符又分为以下几类
在这里插入图片描述
可以根据TYPE域的数值来进行对应的查找,这里我们先不展开说系统描述符,只先理解怎么拆分和查找

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值