保护模式
学习保护模式是为了了解操作系统的运行逻辑,可以看透本质
电脑启动是从实模式跳转到保护模式
原因
主要是为了保护寄存器
- 段
- 段是有权限的
- 页
段
我们平常写某一个地址的时候:
mov dword ptr ds:[0x123456],eax
我们真正读取的地址是:
ds.base+0x123456
段寄存器
一共八个,分别是ES\CS\SS\DS\FS\GS\LDTR\TR,共8个
段寄存器结构
strut SegMent
{
WORD Selector; // 16位Select
WORD Atrributes; // 16位Attribute
DWORD Base; // 32位Base
DWORD Limit; // 32位Limit
}
将段选择子(Segment Selector)的值 0x002B 按位(Bit-level)进行二进制拆解,并说明其各个字段的由来。
十六进制 0x002B 转为 16 位二进制数:
我们将这 16 位从高位到低位按照保护模式规范进行分段对拆:
位 15 ~ 3 (13 bits) 位 2 (1 bit) 位 1 ~ 0 (2 bits)
┌───────────────────────────┬───────────────┬──────────────────┐
│ Index (段描述符索引) │ TI (表指示器) │ RPL (请求特权级)│
├───────────────────────────┼───────────────┼──────────────────┤
│ 0000 0000 0101 (5) │ 0 │ 11 (3) │
└───────────────────────────┴───────────────┴──────────────────┘
结合截图中的文字说明,各部分具体含义如下:
二进制拆解对应关系
- RPL(Requested Privilege Level,请求特权级)
- 位置:Bit 0 ~ Bit 1(低 2 位)
- 二进制值:
11(即十进制3,代表 Ring 3 用户态特权级)。 - 截图对应:倒数第一个字段
11(即特权级 Ring 3)。
- TI(Table Indicator,段表指示器)
- 位置:Bit 2(第 3 位)
- 二进制值:
0代表使用 GDT(全局描述符表);1代表使用 LDT(局部描述符表)。 - 截图对应:中间的
0(并在右侧标注了0 GDT/1 LDT的对应关系)。
- Index(Descriptor Index,描述符索引)
- 位置:Bit 3 ~ Bit 15(高 13 位)
- 二进制值:
0000 0000 0101(即二进制的101,换算为十进制是 5,代表指向 GDT 中的第 5 项描述符)。 - 截图对应:前面的
0010 1,拼接后即高位的101(索引 5)。
段描述符
