gpt4 book ai didi

windows - CS 和 DS 寄存器是否仍然影响 x64 intel 中的指令

转载 作者:行者123 更新时间:2023-12-05 01:13:44 33 4
gpt4 key购买 nike

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 在指令操作数中用作基址寄存器,则某些由内存访问引起的错误会报告为堆栈错误而不是 GP 错误) )。

关于windows - CS 和 DS 寄存器是否仍然影响 x64 intel 中的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59911059/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com