环之间跳转时的处理器行为

时间:2018-12-26 16:15:54

标签: x86 cpu-architecture osdev kernel-mode

当某些内核代码(Ring 0)对用户代码(Ring 3)例程进行“调用”时,我找不到有关标准CPU(即x86)真正发生状况的任何具体信息。

1)执行该例程时,CPU模式状态是否变为用户模式?

2)在用户级别的例程中执行了最后的“ ret”指令后,由于试图返回到内核空间代码而引发了异常?

2 个答案:

答案 0 :(得分:5)

call s只能提升特权,而ret s只能降低特权。
英特尔手册3A的第5章将提供完整的详细信息。


如果内核对用户模式段执行了远距离调用,则会引发#GP,并且它可能会惊慌/错误检查系统。
如果通话临近,特权将保持不变;假设是平面模型和映射目标,则为a common attack vector for privilege escalation

如果应用程序尝试对特权更高的段执行ret,则会引发#GP。

答案 1 :(得分:2)

您从内核使用iret返回到用户空间。

系统调用和中断运行内核代码;在正常的操作系统中,内核不会call far降低特权级别。

是的,我认为ret far无法将特权级别从环1..3。恢复到环0。