段描述符属性S位和TYPE域
前言:段描述符属性S位和TYPE域笔记
学习的内容是如下红框的S位和TYPE域

段描述符S位
段描述的S位的位置:在高4字节的第12位

段描述的S位的作用:描述了该段代表的是系统段描述符还是数据/代码段描述符
-
如果S位为1 则代表的是 数据/代码段描述符
-
如果S位为0 则代码的是 系统段描述符
比如这里的00cf9b00 0000ffff,它的S位则是则是9 1001,那么高4字节第12位则为1,所以这里的1则代表的是数据/代码段描述符
段描述符TYPE域
TYPE域的位置:在高4字节的第8-11位
这里的TYPE域也有区别,什么区别的呢?
如果S位为1的话,那么此时当前的段描述符为数据/代码段描述符,那么此时TYPE域就是来决定是 数据段描述符/代码段描述符的相关属性
如果S位为0的话,那么此时当前的段描述符为系统段描述符,那么此时TYPE域就是来决定是 系统段描述符的相关属性
数据段描述符
还是看这里的00cf9b00 0000ffff,它的S位则是则是9 1001,那么第12位则为1,所以这里的1则代表的是数据/代码段描述符,那么再来判断是说代码还是数据段描述符,这里的话就看TYPE域,那么就是b,十进制为11
对于数据段描述符,类型字段的低3位(位8,9,10)分别用于表示已访问A,可写W,和扩展方向E,根据可写比特位W的设置,一个数据段可以是只读的,也可以是可读可写的。
A:如果为1,代表该数据段描述符已经被访问过了
W:如果为1,代表该数据段描述符是可写的
E:如果为1,表示向下扩展;E=0,表示向上扩展,windows只使用向上扩展,也就是E为0

那么上面的十进制为11,根据上面的图来看,对准的条目就是如下,那么则说明是代码段描述符

可以总结如下:
-
TYPE域的十进制<8 数据段描述符
-
TYPE域的十进制>8 代码段描述符
数据段描述符的扩展方向E-向上拓展/向下拓展
数据段描述符中还有个向上/向下拓展的知识点
向上拓展和向下拓展可以理解为取反的表现
先来讲什么是向上拓展/向下拓展,需要知道的就是只有数据/代码段描述符存在向上拓展/向下拓展的区别,向上和向下是由其中Type Field为E决定的

左图是向上拓展,右图是向下拓展,如下图所示

向上扩展和向下扩展决定了当前小段 或者 整个大段的寻址访问权限,决定是否是小段还是大段的地址是基于段描述符的D/B位来进行决定的,下一篇笔记来学习这个
代码段描述符

C:如果为1,表示一致代码段;如果为0,表示非一致代码段
R:如果为1,表示可读;如果为0,表示不可读
A:如果为1,表示段曾被访问;如果为0,表示段未被访问
系统段描述符

这里需要知道段描述符S位为0的话,并且当前P位为1,那么此时该段描述符则代表的就是系统段描述符,比如80008954 9f000068,那么该S位就为0,然后P位为1,那么这个就是系统段描述符

80008954 9f000068 继续看,可以看到该TYPE域为9,那么对应的就是如下图所示

课后练习
8003f000 00000000`00000000 00cf9b00`0000ffff
8003f010 00cf9300`0000ffff 00cffb00`0000ffff
8003f050 80008954`9f000068 80008954`9f680068
1、找出所有数据段,并分析该段属性:只读、已访问、可读可写、拓展方向
00cf9300`0000ffff -> 数据段 E:0 W:1 A:1

2、找出所有代码段,并分析该段属性:只执行、可读可执行、已访问、一致代码
00cf9b00`0000ffff -> 代码段 b -> 11 那么则是 c:0 r:1 a:1
00cffb00`0000ffff -> 代码段 b -> 11 那么则是 c:0 r:1 a:1
3、找出所有系统段,并分析属性.
80008954`9f000068 -> 系统段 9 那么则是如下

80008954`9f680068 > 系统段 9 那么则是如下


浙公网安备 33010602011771号