段描述符属性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 那么则是如下

posted @ 2022-02-03 21:01  zpchcbd  阅读(475)  评论(0)    收藏  举报