[英]Allocate executable ram in c on linux
我想在Linux上用c创建一个简单的即时编译器。
如何分配内存,以便可以向其中写出原始的x86代码并将其作为其他函数执行?
请参见mprotect()。 一旦用代码填充了(n)页大小的内存区域(与mmap()一起分配),请更改其权限以禁止写入并允许执行。
除了正确使用mprotect
来提供首先写入然后执行的权限外,在某些OS /硬件操作上,您可能还需要刷新I-cache 。 目前(2010年中),所有最新的x86处理器都具有用于指令和数据的单独的1级缓存,并且有人必须确保如果将新指令写入内存(这将更新D缓存),则不会然后尝试从I缓存执行过时的位。 究竟如何从用户空间刷新I缓存将取决于您的硬件和操作系统。 我的建议是阅读有关 IA-32多处理器的“自动修改代码”的英特尔文档 。 这应该足以使您通过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.