当某些内核代码(Ring 0)对用户代码(Ring 3)例程进行“调用”时,我找不到有关标准CPU(即x86)真正发生状况的任何具体信息。
1)执行该例程时,CPU模式状态是否变为用户模式?
2)在用户级别的例程中执行了最后的“ ret”指令后,由于试图返回到内核空间代码而引发了异常?
答案 0 :(得分:5)
call
s只能提升特权,而ret
s只能降低特权。
英特尔手册3A的第5章将提供完整的详细信息。
如果内核对用户模式段执行了远距离调用,则会引发#GP,并且它可能会惊慌/错误检查系统。
如果通话临近,特权将保持不变;假设是平面模型和映射目标,则为a common attack vector for privilege escalation。
如果应用程序尝试对特权更高的段执行ret
,则会引发#GP。
答案 1 :(得分:2)