4

在内核在第一次进入时加载本机用户态 Linux 应用程序后,x86-64 CPU 寄存器大多为零,除了具有通常含义的 RSP 和 RIP,寄存器 CS SS 和 R11 非零:

cs             0x33 51
ss             0x2b 43
r11            0x200    512

据我了解,CS 和 SS 寄存器在 x86-64 上未使用,因为在长模式下,我们有一个平坦的 64 位地址模型。

CS 和 SS 寄存器对内核有什么意义吗?用户空间是否期望简单地让他们独自一人?

R11 中最初的 512 值是否意味着什么?

4

1 回答 1

8

在 64 位模式下,段寄存器仍然指向 IDT 或 GDT 条目。但是 IDT/GDT 条目仅包含有限的信息:

数据段选择器(对 DS、ES、SS、FS 和 GS 有效)仅包含一个位:“P”位指示该段存在。这仅对加载到 FS 和 GS 寄存器中的段有意义。

代码段选择器(对 CS 有效)包含访问权限信息和指示当 CS 指向此类段时 64 位模式处于活动状态的长模式位。

段基数和段长度不存在。

于 2013-10-21T19:48:44.240 回答