在英特尔微处理器中通过使用 RPL 削弱 CPL 来访问低权限堆栈

Accessing underprivileged stack by weakening the CPL with RPL in intel microprocessor

据我所知,当我们要访问一个栈段时,描述符的DPL应该等于

max(RPL,CPL)

其中RPL是SS段寄存器的,CPL是当前特权级。

那么我们可以通过用 RPL 削弱我们的 CPL 来访问一个弱势堆栈吗? 例如,对于SS段寄存器,CPL=0,RPL=3。所以我们应该可以访问PL 3的堆栈。是真的吗?

没有

英特尔 SDM 的第 5.7 节很清楚

Privilege level checking also occurs when the SS register is loaded with the segment selector for a stack segment.
Here all privilege levels related to the stack segment must match the CPL; that is, the CPL, the RPL of the stack segment selector, and the DPL of the stack-segment descriptor must be the same. If the RPL and DPL are not equal to the CPL, a general-protection exception (#GP) is generated.

理由是出于安全原因,特权代码无法与非特权代码共享堆栈 - 每个特权都有自己的堆栈,如 TSS 中所定义。

您可以使用数据段寄存器访问堆栈(例如通过ds),在这种情况下必须有max(CPL, RPL) <= DPL (弱化的 CPL 仍然比该段的 DPL 具有更多或同等的特权)。