operating-system - 是什么阻止用户应用程序通过 "hijack"进入内核模式?

标签 operating-system kernel

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

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

我的问题是:

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

最佳答案

我不知道这是如何在硬件本身中强制执行的。它还取决于架构。在 x86 软件中,这取决于情况,因为有多个入口点。当CPU启动时,它处于内核模式。它可以执行每条指令并用主内存做任何它想做的事。

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

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

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

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

关于operating-system - 是什么阻止用户应用程序通过 "hijack"进入内核模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68238896/

相关文章:

c# - 为 WinForm 应用程序分配一个控制台

windows - 有没有人在 ReactOS 上试用过他们的软件?

linux - 如何使用 ftrace 跟踪 linux 公平(调度程序)进程

operating-system - 为什么大多数 posix 命名对象都是用 unlink 设计的?

c++ - execvp( command.argv[0], command.argv) 后程序停止

linux-kernel - 上下文切换到内核的顺序是什么

linux - 在内核构建中使用交叉编译工具

C 字符数组始终为空。内核开发

mysql - 数据库支持的操作系统

linux - 如何通过bash检查最新的内核版本