计算机底层编程:长模式分段、寄存器访问与虚拟内存解析
1. 长模式下的最小分段
在长模式中,每次选择指令时,处理器都会使用分段机制。它会提供一个扁平的线性虚拟地址,随后该地址会通过虚拟内存例程转换为物理地址。
局部描述符表(LDT)是硬件上下文切换机制的一部分,但实际上并未被广泛采用,因此在长模式中被完全禁用。通过主要段寄存器(如 cs、ds、es 和 ss)进行的所有内存寻址,不再考虑全局描述符表(GDT)中的基地址和偏移量。无论描述符内容如何,段基地址始终固定为 0x0,且段大小没有限制。不过,描述符的其他字段不会被忽略。
在长模式下,GDT 中至少应存在三个描述符:空描述符(任何 GDT 中都应始终存在)、代码段描述符和数据段描述符。若要使用保护环来实现特权模式和用户模式,则还需要用户级代码和数据的描述符。这是因为没有一种描述符标志的组合能让程序员同时设置读写权限和执行权限。
以下是一个示例 GDT 的代码片段:
align 16 ; This ensures that the next command or data element is
; stored starting at an address divisible by 16 (even if we need
; to skip some bytes to achieve that).
; The following will be copied to GDTR via LGDTR instruction:
GDTR64: ; Global Descriptors Table Regi
超级会员免费看
订阅专栏 解锁全文
14

被折叠的 条评论
为什么被折叠?



