欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

全局描述符表(GDT)详解!

全局描述符表(GDT)详解!

  • 全局描述符表(Global Descriptor Table )
全局描述符表(GDT) 应用在IA-32构架中。它包含了内存分段的入口信息。此外还有两种类似的描述符表(中断描述符表IDT和局部描述符表LDT)。
  • 结构
1、GDT通过汇编指令LGDT载入。它的操作码是一个结构的地址,这个结构描述GDT的大小和地址。共6个字节,如下:
Size项(2个字节)是GDT的字节数减1(这也意味着GDT大小不可能为0)。2个字节对应最大值是65535,也就是说一个GDT最大也就是65536字节(8192个内存分段)。Offset项(4个字节)指向GDT的线性地址(未开启分页机制则是物理地址)。
2、全局描述符是一个8个字节的结构,具体结构如下:
Limit 0:15项和Limit 16:19项一起构成20位的段界限。20位的段界限最大值为0xFFFFF,单位是字节或者分页(有Flags项Gr位来确定)。在分页机状态下最大可以表达4G的内存空间。
Base0:23项和Base24:31一起构成32位的段基址,是线性还是物理地址也取绝于分页机制是否开启。
3、下面是Access byte项和Flags项的说明:
Pr位:存在位,对于一个有效的内存分段此值必定为1。
Privl位:优先级位(2位),取值从0-3,对应Ring0-Ring3级别。
注:Privl右面那一位为1时表示此描述符对应是代码段和数据段,否则为系统或者各种门描述符。
Ex位:可执行位,为1时表示此描述符对应是代码段,否则为数据段。
DC位:(1)对于数据段,表于数据段的增长方向,0表示向上。1表示向下,也就是偏移大于段基址。(2)对于代码段,表示是否遵循一致原则。(当此位为1时,也就是遵循一致原则,不同优先级代码跳转时,优先级同目标代码所在段一致。为0时,刚跳转时优先级不变。)
RW位:读写位,(1)对于数据段,为1时表示可写,为0时表示不可写。数据段总是可读。(2)对于代码段,为1时表示可读,为0时表示不可读。代码段总是不可写。
Ac位:保留位,设置为0,当被访问过时系统将其改写为1。
Gr位:表示段界限的单位,为1时表示单位为4KB(一个页面),为0时表示单位为1字节。
Sz位:区分是16位保护模式,还是32位保护模式。你可以同时有两种类型描述符在同一个GDT中。
http://wiki.osdev.org/Global_Descriptor_Table

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功