首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在内核空间内执行用户空间代码

在内核空间内执行用户空间代码
EN

Stack Overflow用户
提问于 2015-04-20 17:23:16
回答 2查看 1.5K关注 0票数 4

我注意到,在内核模式下,可以对某些应用程序内存(我所处的环境)进行读/写,但不能执行用户空间代码。

我猜这与内核代码段(限制和粒度)有关。有没有办法执行用户空间地址?我知道它破坏了Linux安全模型等,我只是出于自己的好奇心,想知道是否有可能欺骗Linux内核,让它执行用户空间代码。

EN

回答 2

Stack Overflow用户

发布于 2015-04-20 19:07:10

用户空间程序有自己的虚拟地址空间(<0xC0000000),不可能从内核空间(>0xC0000000)执行这样的程序。也许您应该看看user-helper-api (Invoking user-space applications from the kernel)和linux进程间通信(IPC)内核套接字、共享内存和信号。网络工具使用IPC (内核套接字)进行通信。驱动程序使用user-helper-api通知用户空间中的一些事件。如果您对如何使用二进制用户空间程序感兴趣,可以查找UPROBE linux内核模块(uprobe可以解析用户空间二进制文件并编辑用户空间程序指令)。

票数 1
EN

Stack Overflow用户

发布于 2015-04-20 19:13:27

假设Linux在x86系统上是32位的(因为OP没有提供该信息):

内核在任何进程中都是可见的,并且在特定的进程上下文中,内核可以对该进程映射到其内存映射中的任何内存地址进行读写。这也意味着可以执行一个调用来执行一些驻留在0xc0000000标记以下的代码(对于32位Linuxes),前提是:

  • 代码不会发出系统调用。
  • 内核已锁定代码所在的内存及其使用的数据,以便在执行代码时不会出现页错误。
  • 如果内核使用NX功能将页标记为不可执行,则必须取消标记要执行的代码所在的页。
  • 代码不会生成任何其他异常,例如除以零。

< code >F29

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29743878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档