【Windows内核】(2) 段描述符,段选择子

一、段描述符

GDT(全局描述符表) LDT(局部描述符表)

GDTR是一个寄存器

GDT是一张表 里面存储的段描述符(一个段描述符八个字节)

结构如下:

BASE: 段基址,由上图中的两部分(BASE 31-24 和 BASE 23-0)组成

G:LIMIT的单位,该位 0 表示单位是字节,1表示单位是 4KB

D/B: 该位为 0 表示这是一个 16 位的段,1 表示这是一个 32 位段

AVL: 该位是用户位,可以被用户自由使用

LIMIT: 段的界限,单位由 G 位决定。数值上(经过单位换算后的值)等于段的长度(字节)- 1。

P: 段存在位,该位为 0 表示该段不存在,为 1 表示存在。

DPL:段权限,访问我要有什么特权

S: 该位为 1 表示这是一个数据段或者代码段。为 0 表示这是一个系统段(比如调用门,中断门等)

TYPE: 根据 S 位的结果,再次对段类型进行细分。

拆分一个段描述符 0000FFFF 00CF9B00

0000 0000 0000 0000 1111 1111 1111 1111 0000 0000 1100 1111 1001 1011 0000 0000

BASE:00FF00CF

G:0

D/B:0

L:0

AVL:0

LImit:0

P:1

DPL:11

S:1

TYPE:1111

二、段选择子

段选择子有16位,结构如下:

其中,0-1位是RPL,请求特权级别,我用什么特权访问

2位是TI位,0表示查GDT表(windows不使用LDT所以此位永远是0)

3-15位是GDT表的下标,用这个检索GDT表中的段描述符

拆分一个段选择子:

0x0023
0000000000100 0 11
Index: 0x4 指向GDT中的第五个
TI: 0 查GDT表
RPL: 11 权限为3

posted @ 2021-03-04 16:02  一窝吉尼斯  阅读(338)  评论(0)    收藏  举报