gpt4 book ai didi

linux - 在关闭 NX 位的情况下在 Linux 中分配数据页

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:39 31 4
gpt4 key购买 nike

我想在我的程序中生成一些机器代码,然后运行它。一种方法是写出一个 .so 文件,然后将其加载到程序中,但这似乎太昂贵了。

在 Linux 中有没有一种方法可以让我在我的数据页中写出代码,然后将我的函数设置在那里并调用它?我在 Windows 上看到了类似的东西,您可以在其中分配一个页面,并为该页面关​​闭 NX 保护,但我找不到类似的 Linux 操作系统调用。

最佳答案

mmap(2) (使用 munmap(2))和 mprotect(2)系统调用是执行此操作的基本操作。回想一下 syscalls从应用程序的角度来看,它们是基本操作。你想要 PROT_EXEC

您可以strace 任何动态链接的可执行文件以获取有关如何调用它们的线索,因为动态链接器ld.so 正在使用它们。

生成共享对象的成本可能比您想象的要低。实际上,生成 C 代码,运行编译器,然后 dlopen-ing 生成的共享对象具有一定的意义,即使您以交互方式工作也是如此。我的MELT领域特定语言(扩展 GCC)正在这样做。回想一下,您可以毫无问题地执行大量的 dlopen-s。

如果你想在内存中生成机器码,你可以使用GNU lightning (快速生成慢速机器码),libjit 来自dotgnu (生成更少的坏机器代码),LuaJit , asmjit (特定于 x86 或 amd64),LLVM (慢慢生成优化的机器代码)。顺便说一句,SBCL Common Lisp 实现动态编译到内存并在运行时生成良好的机器代码(并且还有所有用于 JVM 的 JIT 都在这样做)。

关于linux - 在关闭 NX 位的情况下在 Linux 中分配数据页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711475/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com