我注意到,在内核模式下,可以对某些应用程序内存(我所处的环境)进行读/写,但不能执行用户空间代码。
我猜这与内核代码段(限制和粒度)有关。有没有办法执行用户空间地址?我知道它破坏了Linux安全模型等,我只是出于自己的好奇心,想知道是否有可能欺骗Linux内核,让它执行用户空间代码。
发布于 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可以解析用户空间二进制文件并编辑用户空间程序指令)。
发布于 2015-04-20 19:13:27
假设Linux在x86系统上是32位的(因为OP没有提供该信息):
内核在任何进程中都是可见的,并且在特定的进程上下文中,内核可以对该进程映射到其内存映射中的任何内存地址进行读写。这也意味着可以执行一个调用来执行一些驻留在0xc0000000标记以下的代码(对于32位Linuxes),前提是:
< code >F29
https://stackoverflow.com/questions/29743878
复制相似问题