是什么阻止用户应用程序 "hijack" 进入内核模式?

What prevents an user application from being able to "hijack" into kernel mode?

据我了解。内核模式是一种硬件特性。前任。它可以通过寄存器设置(value1 -> 内核模式,value2 -> 用户模式)。

当内核加载并运行用户应用程序时,用户应用程序应通过系统调用与内核通信以执行特权操作,在此期间会发生中断,执行将切换到内核模式并执行特权操作.

我的问题是:

阻止恶意用户应用程序设置“模式”寄存器并进入内核模式(例如 x86)的机制是什么? 只有内核可以设置这个寄存器是有道理的,我想知道更多关于如何强制执行的细节。

我不知道硬件本身是如何实施的。它还取决于体系结构。在 x86 的软件中,这取决于有几个入口点。当 CPU 启动时,它处于内核模式。它可以执行每条指令,对主存做任何想做的事。

因此,在启动任何用户模式进程之前,内核将利用这一点在引导期间设置页表和中断处理程序。

在 x86 上,内核模式与用户模式由页表强制执行。如果用户模式进程试图访问设置为内核模式的页面,它将触发错误并在内核模式下调用中断处理程序。内核将因此终止进程。

中断并不意味着是内核的入口点。如果发生故障,它们仍然可以,但用户模式进程不会知道,它有时会终止进程(如果内核决定它应该)。

在 x86 上,内核的真正入口点是 LSTAR MSR 寄存器。该寄存器只能从内核模式设置。它可以与汇编中的 syscall 指令一起使用,以跳转到寄存器中指定的地址。除非使用 syscall 指令,否则用户模式进程无法跳入内核。因此,它允许内核为用户模式设置一些称为系统调用的服务。