我注意到在内核模式下可以读取/写入某些应用程序内存(我在上下文中),但是无法执行用户空间代码。
我猜它与内核代码段(限制和粒度)有关。有没有办法执行用户空间地址? 我知道它破坏了Linux安全模型等,我只是想知道是否有可能欺骗Linux内核并使其执行用户空间代码。
答案 0 :(得分:1)
用户空间程序具有其自己的虚拟地址空间(< 0xC0000000),并且不可能从内核空间(> 0xC0000000)执行这样的程序。您可能应该查看user-helper-api(Invoking user-space applications from the kernel)和linux进程间通信(IPC)内核套接字,共享内存和信号。网络工具使用IPC(内核套接字)进行通信。驱动程序使用user-helper-api通知用户空间有关某些事件。如果您对如何使用二进制用户空间程序感兴趣,可以查找UPROBE linux内核模块(uprobe可以解析用户空间二进制文件并编辑用户空间程序指令)。
答案 1 :(得分:0)
假设Linux在x86系统上,32位(因为OP没有提供该信息):
内核在任何进程中都是可见的,而在特定进程上下文中,内核可以读取和写入进程已映射到其内存映射的任何内存地址。这也意味着可以执行调用以执行一些位于0xc0000000标记以下的代码(对于32位Linux),前提是: