从内存加载动态链接库(Load dynamic library from memory)

2019-09-20 20:46发布

是否有可能从内存而不是从MAC / gcc的文件系统加载一个库?

与Windows我使用MemoryModule但它显然不是跨平台兼容。

Answer 1:

第一件事首先,要做到这一点,我建议你使用阅读OS X ABI动态加载程序参考 。

要做到这一点,你必须使用NSCreateObjectFileImageFromMemory API。

给定的指针在存储器中的Mach-O的文件,该函数创建并返回一个NSObjectFileImage参考。 当前实现仅适用于捆绑,所以你必须使用建立的Mach-O可执行文件-bundle连接选项。

该存储器块address到,必须被分配点vm_allocate/usr/include/mach/vm_map.h )。

确保由要求遵守vm_allocate用于包含该模块的存储块。

一旦你掌握了目标文件图像,您必须使用NSLinkModule功能模块链接到该程序。

当你调用这个函数,通过给定的模块引用的所有库添加到库搜索列表。 除非你通过NSLINKMODULE_OPTION_PRIVATENSLinkModule添加模块全局符号列表中的所有全局符号。

连接后,不要忘记通过调用清理NSDestroyObjectFileImage功能。

当这个函数被调用时,动态加载程序调用vm_deallocate/usr/include/mach/vm_map.h )在内存中指出objectFileImage参数。

请注意,虽然这些功能已被弃用,存在使用建议的替代不可替代的(据我所知) dlopen等。 人。



文章来源: Load dynamic library from memory