gpt4 book ai didi

c++ - 从内存中加载动态库

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:52 25 4
gpt4 key购买 nike

是否可以从内存而不是从 mac/gcc 上的文件系统加载库?

对于 Windows,我使用的是 MemoryModule,但它显然不是跨平台兼容的。

最佳答案

首先,要做到这一点,我建议您阅读 OS X ABI Dynamic Loader Reference .

为此,您必须使用 NSCreateObjectFileImageFromMemory API。

Given a pointer to a Mach-O file in memory, this function creates and returns an NSObjectFileImage reference. The current implementation works only with bundles, so you must build the Mach-O executable file using the -bundle linker option.

The memory block that address points to, must be allocated with vm_allocate (/usr/include/mach/vm_map.h).

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

获取目标文件图像后,必须使用 NSLinkModule函数将模块链接到程序中。

When you call this function, all libraries referenced by the given module are added to the library search list. Unless you pass the NSLINKMODULE_OPTION_PRIVATE, NSLinkModule adds all global symbols in the module to the global symbol list.

链接后,不要忘记调用 NSDestroyObjectFileImage 进行清理功能。

When this function is called, the dynamic loader calls vm_deallocate (/usr/include/mach/vm_map.h) on the memory pointed to by the objectFileImage parameter.

请注意,虽然这些函数已被弃用,但(据我所知)使用建议的替代方法 dlopen 等没有替代方法。等

关于c++ - 从内存中加载动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com