CS 和 DS 寄存器是否仍然影响 x64 intel 中的指令
Does the CS and DS registers still affect instructions in x64 intel
Afaik 他们从未使用过,现在 CS=DS=SS。但是,如果我要设置这些值,会发生任何变化还是处理器会忽略它们。我发现关于这个问题的信息确实相互矛盾,我不明白为什么如果忽略它们,它们仍然会存在。请帮忙
是的,段寄存器仍然影响代码执行。
问题和一些评论似乎没有区分选择器值和基地址。要清楚地理解您正在阅读的关于该主题的一些明显相互矛盾的信息,您需要确保您识别出正在讨论的信息。
CS选择器不能为0。它必须引用GDT或LDT中的有效代码段描述符。代码段描述符的L位控制当前进程是64位模式还是32位兼容模式
CS(选择器)不能等于 DS 和 SS。 CS 必须引用代码段,而 DS 和 SS 必须引用数据段(可能是同一个)。 DS 和 SS 选择器允许为 0(在 32 位模式下会导致 GP 错误)。
仍然没有影响的段寄存器的主要方面是基地址和段限制; CS、DS、ES、SS的基地址都被当作0处理,64位代码中没有段限制检查。
这就是你看到人们说他们被忽视的原因。
正如 Margaret 提到的,当前特权级别 (CPL) 位于 CS 和 SS 选择器寄存器的低 2 位以及 GDT 中描述符的 DPL 位。这些位应该是 0 或 3,因为据我所知,目前没有操作系统使用环 1 和环 2。
另一个小问题是,如果内存访问是使用 SS 段执行的(因为 RBP 或 RSP 在指令操作数)。
Afaik 他们从未使用过,现在 CS=DS=SS。但是,如果我要设置这些值,会发生任何变化还是处理器会忽略它们。我发现关于这个问题的信息确实相互矛盾,我不明白为什么如果忽略它们,它们仍然会存在。请帮忙
是的,段寄存器仍然影响代码执行。
问题和一些评论似乎没有区分选择器值和基地址。要清楚地理解您正在阅读的关于该主题的一些明显相互矛盾的信息,您需要确保您识别出正在讨论的信息。
CS选择器不能为0。它必须引用GDT或LDT中的有效代码段描述符。代码段描述符的L位控制当前进程是64位模式还是32位兼容模式
CS(选择器)不能等于 DS 和 SS。 CS 必须引用代码段,而 DS 和 SS 必须引用数据段(可能是同一个)。 DS 和 SS 选择器允许为 0(在 32 位模式下会导致 GP 错误)。
仍然没有影响的段寄存器的主要方面是基地址和段限制; CS、DS、ES、SS的基地址都被当作0处理,64位代码中没有段限制检查。 这就是你看到人们说他们被忽视的原因。
正如 Margaret 提到的,当前特权级别 (CPL) 位于 CS 和 SS 选择器寄存器的低 2 位以及 GDT 中描述符的 DPL 位。这些位应该是 0 或 3,因为据我所知,目前没有操作系统使用环 1 和环 2。
另一个小问题是,如果内存访问是使用 SS 段执行的(因为 RBP 或 RSP 在指令操作数)。