在MacOS上相当于fexecve

Max*_*Max 5 macos darwin exec system-calls

fexecve(3)在Linux上执行一个存储在memfd中的二进制文件。

macOS是否具有等效功能?我已经尝试过了execve("/dev/fd/%d", [], []),但是失败了EACCES。将文件从该路径复制/dev/fd/%d到新的临时文件,然后执行即可。

有没有一种方法可以在不创建临时文件的情况下进行操作?

Sha*_*ger 1

对于任意文件句柄,没有官方支持的方法来执行此操作。有一些黑客主要由恶意软件使用NSCreateObjectFileImageFromMemory,以通过使用和谎报文件类型来达到效果,但如果没有黑客,它仅限于捆绑文件,不能用于任意可执行文件。

因此,如果您使用捆绑文件,则可以通过一些记录的支持来完成此操作,但如果您不使用捆绑文件,并且您正在尝试编写可移植的、生产质量的代码,则没有明智的方法来做到这一点(用于运行任意代码的黑客很脆弱,依赖于未记录的行为)。