4-段描述符属性分析

段描述符结构

 
|   7    |     6       |     5     |   4    |   3    |   2    |   1    |   0    |  字节
|76543210|7 6 5 4 3210 |7 65 4 3210|76543210|76543210|76543210|76543210|76543210|  比特
|--------|-|-|-|-|---- |-|--|-|----|--------|--------|--------|--------|--------|  占位
|  BASE  |G|D|0|A|LIMIT|P|D |S|TYPE|<------- BASE 23-0 ------>|<-- LIMIT 15-0 ->|  含义
|  31-24 | |/| |V|19-16| |P |
           |B| |L|     | |L |

 

P 位

  • P=1 : 该描述符有效
  • P=0 : 该描述符无效

S 位

  • S=1:该描述符描述代码段或数据段

当 S = 1 时,TYPE为不同值时,有以下含义。


图 1 代码段或数据段

  • A : 访问位,该段是否被访问过。每当处理器将该段选择子置入某个段寄存器时,就将该位置1.

  • W : 该数据段是否可写。

  • E : 扩展方向。通常来说,描述符的 [base, base + limit] 这段空间是可访问的,其它空间不可访问。如果 E = 1,[base, base +limit] 就变的不可访问,相反,其它空间变的可访问。所以 E 位,有反转有效空间的含义。

  • C : C = 1 表示一致代码段。后面的文章会讲解。

  • R : R = 1 表示该代码段可读。代码段是不可写的。

  • S=0:该描述会描述系统段

当 S = 0 时,表示系统段,此时 TYPE 为不同值时,有以下含义。

TYPE含义
0保留
116位TSS段(可用)
2LDT
316位TSS段(忙)
416位调用门
5任务门
616位中断门
716位陷阱门
8保留
932位TSS段(可用)
a保留
b32位TSS段(忙)
c32位调用门
d保留
e32位中断门
f32位陷阱门

这里,你还不需要知道各种系统段到底是什么意思,后续文章会逐渐拉开序幕。

D/B 位

  • 对于代码段的影响

D/B 位会影响指令操作数大小,为 0 时操作数大小为 16位,为 1 时操作大小为 32 位。什么意思呢?

比如说,执行 push 指令时,16 位操作数下,使用的堆栈指针寄存器是 SP,只有 16 位,PUSH一次 SP 的值减 2. 而 32 位操作数下,使用的堆栈指针寄存器是 ESP,PUSH 一次 ESP 的值减 4.

  • 对于数据段的影响

该位为 0 时,段大小最大为 64 KB,该位为 1 时,段大小最大为 4GB。


实验

为了能熟练分析段描述符,必要的练习是必然少不了的。有些同学可能对此不屑,这种东西只要查查手册,对着看一下就行了。对此我也表示沉默,每个人学习方法和套路也是有所不同的,可以理解。

原始数据

 
|--地址--|------------16进制值----------------|

8003f000 00000000`00000000 00cf9b00`0000ffff

8003f010 00cf9300`0000ffff 00cffb00`0000ffff

8003f020 00cff300`0000ffff 80008b04`200020ab

8003f030 ffc093df`f0000001 0040f300`00000fff

8003f040 0000f200`0400ffff 00000000`00000000

8003f050 80008954`a1000068 80008954`a1680068

8003f060 00009302`2f30ffff 0000920b`80003fff

8003f070 ff0092ff`700003ff 80009a40`0000ffff

8003f080 80009240`0000ffff 00009200`00000000

8003f090 00000000`00000000 00000000`00000000

8003f0a0 8200891b`22e00068 00000000`00000000

8003f0b0 00000000`00000000 00000000`00000000

8003f0c0 00000000`00000000 00000000`00000000

8003f0d0 00000000`00000000 00000000`00000000

8003f0e0 f8009f71`a000ffff 00009200`0000ffff

8003f0f0 8000984f`b2e403b7 00009200`0000ffff

8003f100 f8409337`9400ffff f8409337`9400ffff

8003f110 f8409337`9400ffff 00000000`8003f120

 

找出所有数据段,并分析该段属性:只读、已访问、可读可写、拓展方向

分析:数据段特征,第5位十六数字非9即f,第6位十六进制数字 0EWA, E表示扩展方向,W表示可写,A表示已访问

 

第6位常见数字分析:

0: 0000: 向上扩展,只读,未访问

1: 0001: 向上扩展,只读,已访问

2: 0010: 向上扩展,读写,未访问

3: 0011: 向上扩展,读写,已访问

 

第6位常见数字分析:
0: 0000: 向上扩展,只读,未访问
1: 0001: 向上扩展,只读,已访问
2: 0010: 向上扩展,读写,未访问
3: 0011: 向上扩展,读写,已访问

数据段描述符:
        .------第5位
        |.-----第6位
        ||
 1) 00cf9300`0000ffff 向上扩展,读写,已访问
 2) 00cff300`0000ffff 向上扩展,读写,已访问
 3) ffc093df`f0000001 向上扩展,读写,已访问
 4) 0040f300`00000fff 向上扩展,读写,已访问
 5) 0000f200`0400ffff 向上扩展,读写,未访问
 6) 00009302`2f40ffff 向上扩展,读写,已访问
 7) 0000920b`80003fff 向上扩展,读写,未访问
 8) ff0092ff`700003ff 向上扩展,读写,未访问
 9) 80009240`0000ffff 向上扩展,读写,未访问
10) 00009200`00000000 向上扩展,读写,未访问
11) 00009200`0000ffff 向上扩展,读写,未访问
12) 00009200`0000ffff 向上扩展,读写,未访问
13) f8409337`9400ffff 向上扩展,读写,已访问
14) f8409337`9400ffff 向上扩展,读写,已访问
15) f8409337`9400ffff 向上扩展,读写,已访问

找出所有代码段,并分析该段属性:只执行、可读可执行、 已访问、一致代码

分析:代码段特征,第5位十六进制数字非9即f,第6位十六进制数字 1CRA, C表示一致代码段,R表示可读,A表示已访问

 

第6位常见数字分析

8: 1000: 非一致代码段,只执行,未访问

9:1001:非一致代码段,只执行,已访问

a: 1010: 非一致代码段,可执行可读,未访问

b: 1011: 非一致代码段,可执行可读,已访问

 

第6位常见数字分析
8: 1000: 非一致代码段,只执行,未访问
9:1001:非一致代码段,只执行,已访问
a: 1010: 非一致代码段,可执行可读,未访问
b: 1011: 非一致代码段,可执行可读,已访问

代码段描述符
       .------第5位
       |.-----第6位
       ||
1) 00cf9b00`0000ffff 非一致代码段,可执行可读,已访问
2) 00cffb00`0000ffff 非一致代码段,可执行可读,已访问
3) 80009a40`0000ffff 非一致代码段,可执行可读,未访问
4) f7009f66`d000ffff 一致代码段,可执行可读,已访问
5) 8000984f`b6b003b7 非一致代码段,只执行,未访问

找出所有系统段,并分析属性.

分析:系统段特征,第5位十六进制数非8即e,第6位依具体值来判断到底属于什么断。参见下表:

 
0: 保留
1: 16位TSS段(可用)
2: LDT
3: 16位TSS段(忙)
4: 16位调用门
5: 任务门
6: 16位中断门
7: 16位陷阱门
8: 保留
9: 32位TSS段(可用)
a: 保留
b: 32位TSS段(忙)
c: 32位调用门
d: 保留
e: 32位中断门
f: 32位陷阱门

系统段描述符:
       .------第5位
       |.-----第6位
       ||
1) 80008b04`200020ab 32位TSS段(忙)
2) 80008954`b1000068 32位TSS段(可用)
3) 80008954`b1680068 32位TSS段(可用)
4) 8600895e`a3300068 32位TSS段(可用)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值