如何从内存中启动可执行文件?

时间:2012-08-01 07:23:05

标签: macos cocoa macos-carbon core-foundation

任何人都知道在OSX中从内存运行可执行文件的任何事情? 这样的事情:

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

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

1 个答案:

答案 0 :(得分:4)

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

您必须使用vm_allocate分配一个内存缓冲区,该内存缓冲区是pagesize的倍数。将与当前进程相同的体系结构的mach-o可执行文件复制到那里。调用返回对象图像的NSCreateObjectFileImageFromMemory()。然后连续调用NSLinkModule,NSLookupSymbolInModule和NSAddressOfSymbol。最后一个为您提供一个实际的函数指针来调用。

这应该可以提供您需要知道的大部分内容,如果您搜索,您可能会找到代码也可以执行此操作。祝你好运!