使用sysenter时如何设置数据段

时间:2014-04-22 18:04:52

标签: assembly operating-system system-calls osdev

当使用sysenter进行系统调用(从环3到环0的交换机执行)时,这就是CS和SS的设置方式:

CS = IA32_SYSENTER_CS
SS = IA32_SYSENTER_CS + 8

无论我从各种来源读到什么,都没有提到设置数据段寄存器(DS)。使用sysenter时为什么不更改DS?要访问任何数据,是否会使用DS的旧值?

(我对此非常陌生,所以请指出我在理解这一点时可能犯的任何错误)

1 个答案:

答案 0 :(得分:1)

ds和其他数据段寄存器不会自动更改,因为它们不需要。 sysenter旨在尽可能简单,以便尽快执行。作为其中的一部分,许多事情都没有完成,包括更新大多数段寄存器和保存返回地址。如果操作系统需要完成这些操作,则必须手动进行任何更改。

段寄存器完全有可能不需要更改。如果操作系统在64位模式下运行,则大多数分段未使用,因此不需要更改ds。对于任何模式,如果请求的操作很简单,则可能不需要涉及堆栈外部访问的任何内容,因此ds将再次未使用。