问题How to allocate an executable page in a Linux kernel module?的答案描述了如何使用__vmalloc()
分配可执行内存。使用kmalloc()
也可以吗?我的目标是要有一个物理上连续的可执行内存区域。
它没有执行权限。我尝试了一下,dmesg显示“内核试图执行受NX保护的页面-尝试利用吗?(uid:0)”
然后不,我假设您无法kmalloc
可执行内存。除非我对它的工作方式有误(将指针返回到使用1GB巨大页面来覆盖所有物理RAM的现有映射),否则它与kmalloc
的用途/设计完全不兼容。
如果确实需要超过1个物理连续的4k页面的可执行内存,则可以使用vmalloc
以外的其他东西,但我不知道它是什么。 (我不是内核开发人员,我只对全局有一点了解,而对CPU体系结构/ x86则了解很多)。也许类似vmalloc
然后更改页表?
欢迎其他答案。