assembly - 我们可以绕过进入内核模式以汇编语言执行系统调用代码吗?
问题描述
我想知道我们可以将系统调用代码和驱动程序代码复制到我们的汇编程序中并使用这些代码来操作硬件吗?说清除硬盘?
我们可以从内核模式复制代码并用它来做任何我们想做的事情吗?如:我们是否可以将任何在内核中运行的代码复制到用户模式,并与内核完全相同?
有什么东西可以阻止我们这样做吗?
解决方案
我们可以将任何在内核中运行的代码复制到用户模式吗
你不能。内核模式代码与用户模式代码有两个主要区别,导致无法在用户空间中运行:
它使用特权指令(和特权特殊寄存器)与用户空间中不可用的硬件进行通信。如果在用户空间中执行,此类指令将导致硬件异常并将控制重定向到内核异常处理程序,该处理程序将杀死您的程序以执行禁止的指令。
这也回答了你的问题:
有什么东西可以阻止我们这样做吗?
是的,处理器本身会阻止您这样做,并且由于内核已经为此类事件安装了适当的异常处理程序,因此它将相应地采取行动。
即使能够执行这些指令,您仍然需要访问和操作存储在内核空间中的数据,例如目录条目、页表、任务结构等。由于虚拟内存隔离,这些数据对任何用户空间程序都是完全不可见的。
推荐阅读
- html - HTML/CSS:允许背景图像悬停和绝对定位文本
- flutter - 如何在 Flutter 中从流提供者那里获取价值
- python - 为什么列宽不使用 tkinter 中的“权重”填充框架?
- firebase - Flutter 将 num 与 Firebase 中的 dynamic 进行比较
- azure - LogAnalytics - 加入 VMProcess 和 Perf 表以查找资源消耗 PID?
- flutter - 如何从 Flutter 中的歌曲 Youtube URL 仅流式传输歌曲的音频?
- python - 如何比较两个不同csv(旧的和新的)中的两列并在旧csv中存在值时更新第三列与熊猫
- amazon-s3 - 为什么 LogDNA 仅将部分数据积压到 Amazon S3?
- amazon-web-services - Terraform ECS / Github Actions 似乎忽略了 ALB 健康检查
- android - 当我们将 Jetpack Navigation 与 FragmentContainerView 一起使用时,如何避免片段重新创建?