2

任何人都知道在 OSX 中从内存中运行可执行文件吗?像这样的东西:

char *exeFile[size];
loadFromFile(exeFile, "/path/to/data");
execute(exeFile);

出于安全原因,我想这样做。例如,可以在启动前加密和解密 exe。

4

1 回答 1

4

嗯,是的,你可以做到,但它很复杂。我现在无法访问工作代码,但我知道其他人正在/已经使用它。关键是“NSCreateObjectFileImageFromMemory()”,它已被弃用,但据说像 Skype 这样的一些大型应用程序使用它,所以它可能不会很快消失(YMMV)。

您必须使用 vm_allocate 分配一个页面大小的倍数的内存缓冲区。将与当前进程相同架构的 mach-o 可执行文件复制到那里。调用 NSCreateObjectFileImageFromMemory() 返回一个对象图像。然后依次调用 NSLinkModule、NSLookupSymbolInModule 和 NSAddressOfSymbol。最后一个为您提供要调用的实际函数指针。

这应该为您提供了您需要了解的大部分内容,并且如果您搜索,您可能会发现也可以执行此操作的代码。祝你好运!

于 2012-08-02T00:36:45.877 回答