SYSENTER 如何在 64 位模式下使用,什么是IA32_SYSENTER_CS?



阅读SYSENTER指令的描述时,我遇到了以下内容:

IA32_SYSENTER_CS包含环 0 码段 (CS)

我认为 64 位系统现在使用虚拟内存地址方案(分页),它基本上不再依赖于码段 (CS) 寄存器。有人可以解释一下IA32_SYSENTER_CS登记册中究竟包含什么吗?

有两件事:

首先,段寄存器仍然在64位长模式下使用。如英特尔架构手册(系统编程指南;第 3.2.4 节 "IA-32e 模式下的分段"):

在 64 位

模式下,分段通常(但不完全)禁用,从而创建平面 64 位线性地址空间。处理器将 CS、DS、ES、SS 的段基数视为零,创建等于有效地址的线性地址。FS 和 GS 段是例外。这些段寄存器(保存段基数)可用作线性地址计算中的附加基数寄存器。它们有助于寻址本地数据和某些操作系统数据结构。

fsgs提供基址;其他段寄存器仅用于查找访问权限。因此,如果cs包含值0x20,则您处于环 0 特权模式;如果它包含0x33,则您处于环 3 模式。

第二件事是sysenter最初是为 32 位模式设计的。该指令甚至不受所有 64 位模式的 CPU 支持(特别是 AMD 芯片不支持它)。为了获得最大的兼容性,在 64 位长模式下运行的内核将使用syscallsysret指令。

相关内容

  • 没有找到相关文章

最新更新