首页 > 解决方案 > 我们可以绕过进入内核模式以汇编语言执行系统调用代码吗?

问题描述

我想知道我们可以将系统调用代码和驱动程序代码复制到我们的汇编程序中并使用这些代码来操作硬件吗?说清除硬盘?

我们可以从内核模式复制代码并用它来做任何我们想做的事情吗?如:我们是否可以将任何在内核中运行的代码复制到用户模式,并与内核完全相同?

有什么东西可以阻止我们这样做吗?

标签: assemblylinux-kerneloperating-system

解决方案


我们可以将任何在内核中运行的代码复制到用户模式吗

你不能。内核模式代码与用户模式代码有两个主要区别,导致无法在用户空间中运行:

  1. 它使用特权指令(和特权特殊寄存器)与用户空间中不可用的硬件进行通信。如果在用户空间中执行,此类指令将导致硬件异常并将控制重定向到内核异常处理程序,该处理程序将杀死您的程序以执行禁止的指令。

    这也回答了你的问题:

    有什么东西可以阻止我们这样做吗?

    的,处理器本身会阻止您这样做,并且由于内核已经为此类事件安装了适当的异常处理程序,因此它将相应地采取行动。

  2. 即使能够执行这些指令,您仍然需要访问和操作存储在内核空间中的数据,例如目录条目、页表、任务结构等。由于虚拟内存隔离,这些数据对任何用户空间程序都是完全不可见的。


推荐阅读