一.段描述符
实模式: 在这里插入代码片
寻址方式:段基址<<4(20位地址)+段内偏移
保护模式:
寻址方式:段基址计算方式不一样,但是段内偏移一样
特点:增加了许多约束条件,信息量多,一个寄存器(GDTR)放不下,所以指向了一个地址 全局描述符(里面有很多表项)
每一个表项称为段描述符(64字节) 段描述符描述了内存段的起始地址,大小,权限
段描述符结构:
让我们拆分段描述符:
第三个:00cf9300`0000ffff
二进制:0000 0000 1100 1111 1001 0011 0000 0000
0000 0000 0000 0000 1111 1111 1111 1111
Base31:24=00000000
G = 1
D/B = 1
L = 0
AVL = 0
Segment Limit 19:16 = 1111
p = 1
DPL = 00
s = 1
Type = 0011
Base23:16 = 00000000
Base Address 15:00 = 0x0000
Segment limit 15:00 = 0xFFFF
二.段选择子
RPL:0~1位表示RPL,代表请求特权级别,通俗的说是以什么样的特权去访问你
TI:TI为0,查GDT表,TI为1,查LDT表(Window一般为0,不使用LDT)
Index:LDT表或者GDT表的下标,从0开始
拆分段选择子:在这里插入代码片
段选择子=0x0023
二进制 = 0000 0000 0010 0011
index = 0000 0000 0010 0 = 4
TI = 0
RPL = 11 = 3
三.段寄存器
段描述符只有64位,通过拆分属性可以转变成96位
其中段寄存器有很多种 ES CS SS DS FS GS
段寄存器结构:
WORD Selector; //**16位 也就是可见部分 段选择子**
WORD Atrribute; //**16位 8:23 高四字节 代表着是否可读,可写,可执行**
DWORD Base; //32位 Base31:24 + Base23:16 + Base15:00 段从哪里开始
DWORD Limit; //Segment Limit 19:16 + Segment Limit 15:00 线长
未完待续