在linux上分配可执行的内存

我想在Linux上用c做一个简单的即时编译器。

我怎样才能分配内存,我可以写出原始的x86代码,并执行它的任何其他function?

Solutions Collecting From Web of "在linux上分配可执行的内存"

请参阅mprotect()。 一旦用代码填充了一个(n-)页面大小的内存区域(用mmap()分配),请将其权限更改为禁止写入并允许执行。

除了正确使用mprotect来提供第一次写入然后执行权限之外,在某些操作系统/硬件操作中,您可能需要刷新I缓存 。 在这个时候(2010年中),所有最近的x86处理器都有独立的指令和数据的1级缓存,有人必须确定,如果你写入新的指令到内存中(它将更新D-cache)然后尝试从I缓存中执行陈旧的位。 究竟如何从用户空间刷新I-cache将取决于你的硬件和操作系统。 我的建议是阅读英特尔关于他们的IA-32多处理器的“自我修改代码”的文档 。 这应该足以让你通过。