尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

GDTR 寄存器

GDTR 寄存器 GDTRGlobal Descriptor Table Register全局描述符表寄存器是 x86 处理器内部的一个专用寄存器它的唯一职责就是告诉 CPU 全局描述符表GDT在哪里。形象地理解GDTR 相当于存储了 GDT 的“定位信息”让 CPU 在任何时候都能根据其中的数据找到并访问 GDT。核心功能存储 GDT 的位置与大小GDTR 存储了 GDT 两个最关键的信息字段大小描述基地址Base Address32位保护模式/ 64位长模式GDT 在线性地址空间中的起始地址。界限Limit16位GDT 的字节大小减 1即 GDT 的最大有效偏移。如何加载和读取 GDTRGDTR 的内容由两个专用指令控制指令功能特权级lgdt将内存中的一个 6/10 字节数据加载到 GDTR从而设置 GDT 的基地址和界限。特权指令Ring 0sgdt将 GDTR 的当前值存储到内存中用于读取当前的 GDT 信息。可在任何特权级下使用常用于调试与段选择子Segment Selector的联动当执行一条访问内存的指令时CPU 会这样使用 GDTR查看段寄存器从CS、DS等段寄存器中读取段选择子一个 16 位的索引。计算偏移根据段选择子中的索引值×8得到在 GDT 中的偏移量。获取描述符将GDTR 中的基地址加上这个偏移量从 GDT 中读取对应的 8 字节段描述符。执行检查CPU 检查描述符中的权限、段界限等确认无误后才进行后续的内存访问。例如当执行mov ax, [0x1234]时如果DS寄存器指向 GDT 中的某个数据段CPU 就会依据 GDTR 定位到该段描述符从而知道这个数据段的基地址、大小和权限。与 IDTR 的对比GDTR 和另一个寄存器IDTR中断描述符表寄存器结构非常相似但用途不同寄存器指向的表用途GDTRGDT全局描述符表管理内存段分段机制IDTRIDT中断描述符表管理中断和异常处理程序它们都存储一个“基地址界限”对lgdt/sgdt与lidt/sidt指令也一一对应。重要注意事项无法直接访问GDTR 不能像通用寄存器如rax那样被指令直接读写只能通过lgdt和sgdt间接操作。特权级限制lgdt只能在最高特权级Ring 0执行这是操作系统内核的领地。普通应用程序无权修改 GDTR。系统初始化在 x86 处理器上电后GDTR 有一个默认值但操作系统在进入保护模式前必须用lgdt加载自己定义的 GDT。总而言之GDTR 是 CPU 内部的一个指针寄存器它存储了 GDT 的内存地址和大小是 x86 分段机制得以运行的基础设施。
返回列表