保护模式

学习保护模式是为了了解操作系统的运行逻辑,可以看透本质

电脑启动是从实模式跳转到保护模式

原因

主要是为了保护寄存器

  • 段
    • 段是有权限的
  • 页

段

我们平常写某一个地址的时候:

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)      │
└───────────────────────────┴───────────────┴──────────────────┘

结合截图中的文字说明,各部分具体含义如下:

二进制拆解对应关系

  1. RPL(Requested Privilege Level,请求特权级)
    • 位置:Bit 0 ~ Bit 1(低 2 位)
    • 二进制值:11(即十进制 3,代表 Ring 3 用户态特权级)。
    • 截图对应:倒数第一个字段 11(即特权级 Ring 3)。
  2. TI(Table Indicator,段表指示器)
    • 位置:Bit 2(第 3 位)
    • 二进制值:0 代表使用 GDT(全局描述符表);1 代表使用 LDT(局部描述符表)。
    • 截图对应:中间的 0(并在右侧标注了 0 GDT / 1 LDT 的对应关系)。
  3. Index(Descriptor Index,描述符索引)
    • 位置:Bit 3 ~ Bit 15(高 13 位)
    • 二进制值:0000 0000 0101(即二进制的 101,换算为十进制是 5,代表指向 GDT 中的第 5 项描述符)。
    • 截图对应:前面的 0010 1,拼接后即高位的 101(索引 5)。

段描述符

image.png

页