gpt4 book ai didi

assembly - 操作系统和程序集 : What prevents user mode from setting selector to arbitrary value?

转载 作者:行者123 更新时间:2023-12-01 21:53:48 27 4
gpt4 key购买 nike

我知道操作系统通过使用分段和特权级别来限制对内核代码和数据的访问。但是,用户可以更改段寄存器的值,如果以下代码成功执行,我们似乎可以访问内核数据:

mov eax, 0x10 
mov es, ax #point selector to the item 2 in GDT with RPL 0, which is the data segment
les bx, [0]

所以我想知道阻止这段代码成功执行的机制是什么?

最佳答案

mov es, ax 指令将导致一般保护 (#GP) 错误,因为当前特权级别 (CPL) 大于描述符的特权级别 (DPL),或者请求的特权级别(RPL) 将被忽略,因为它在数值上不高于 DPL。在您的示例中,由于它在用户模式下运行,因此 CPL 为 3。这意味着描述符的 DPL 也必须为 3,否则指令将出错。如果 DPL 为 3,则不会出现故障,但实际上会忽略 RPL,因为它不能高于 DPL。

(请注意,段特权级别检查仅在加载段寄存器时执行,因此只有 mov es, ax 指令会因此而崩溃。)

英特尔软件开发人员手册中MOV指令的文档解释了加载段寄存器时何时会导致#GP错误:

IF DS, ES, FS, or GS is loaded with non-NULL selector
THEN
IF segment selector index is outside descriptor table limits
or segment is not a data or readable code segment
or ((segment is a data or nonconforming code segment)
or ((RPL > DPL) and (CPL > DPL))
THEN #GP(selector); FI;
IF segment not marked present
THEN #NP(selector);
ELSE
SegmentRegister ← segment selector;
SegmentRegister ← segment descriptor; FI;
FI;

所使用的最高 DPL 和 RPL 的行为记录在英特尔 SDM 第 3 卷“5.5 特权级别”中:

  • Requested privilege level (RPL) — [...] Even if the program or task requesting access to a segment has sufficient privilege to access the segment, access is denied if the RPL is not of sufficient privilege level. That is, if the RPL of a segment selector is numerically greater than the CPL, the RPL overrides the CPL, and vice versa. [...]

选择器的 RPL 字段只允许将有效特权级别增加到数字上比 DPL 更高或更低的特权级别。如果您将其设置为较低的数值级别,则没有任何效果。

换句话说,如果选择器 0x10 引用内核模式数据段 (DPL = 0),那么您的代码将会崩溃。如果选择器 0x10 是用户模式数据段 (DPL = 3),它的处理方式与使用 0x13 (RPL = 3) 相同。


请注意,实际上这并不重要,因为所有现代操作系统都使用平面段模型,每个段的基数都为 0,并且可以访问整个线性地址空间。用户模式代码实际上并没有通过段检查限制访问内核代码和数据,而是通过页面保护。这些仅使用 CPL 来确定是否应授予对主管模式(内核)页面的访问权限。

关于assembly - 操作系统和程序集 : What prevents user mode from setting selector to arbitrary value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58705618/

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