简短的回答:不。
长答案:不写到磁盘就可以这样做,但很棘手。从理论上讲,您可以编写自己的elf加载器,该加载器读取二进制文件,映射一些内存,根据需要处理动态链接,然后转移控制权,但这需要进行大量工作,这几乎是不值得的。
下一个最佳解决方案是将其写入磁盘并尽快调用取消链接。该磁盘甚至不必是“实际”磁盘,它可以是tmpfs或类似磁盘。
我最近使用的替代方法是不传递完整的已编译二进制文件,而是传递LLVM字节码,然后可以将其适当地进行JIT
/解释/保存。这还具有使您的应用程序在异构环境中工作的优势。
它可能是很有诱惑力尝试的组合
fmemopen,
fileno并且
fexecve,但这并不原因有二:
- 从
fexecve()
联机帮助页:
“文件描述符fd必须以只读方式打开,并且调用者必须有权执行 它所引用的文件 ”
即它必须是引用文件的fd。
- 从
fmemopen()
联机帮助页:
“没有与这些函数返回的文件流关联的文件描述符(即,
fileno(3)如果在返回的流上调用将返回错误)”



