繁体   English   中英

在Linux上的C中分配可执行RAM

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM