从内存加载动态库
Load dynamic library from memory
是否可以从内存而不是从mac/gcc上的文件系统加载库?
对于windows,我使用MemoryModule,但它显然不兼容跨平台。
首先,我建议您使用OSX ABI动态加载器参考。
若要执行此操作,必须使用NSCreateObjectFileImageFromMemory API。
给定一个指向内存中Mach-O文件的指针,此函数将创建并返回一个
NSObjectFileImage
引用。当前实现仅适用于bundle,因此必须使用-bundle
链接器选项构建Mach-O可执行文件。
address
指向的内存块必须分配有vm_allocate
(/usr/include/mach/vm_map.h
)。
确保遵守vm_allocate
用于包含模块的内存块的要求。
获取对象文件映像后,必须使用NSLinkModule函数将模块链接到程序中。
调用此函数时,给定模块引用的所有库都会添加到库搜索列表中。除非通过
NSLINKMODULE_OPTION_PRIVATE
,否则NSLinkModule
会将模块中的所有全局符号添加到全局符号列表中。
链接后,不要忘记通过调用NSDestroyObjectFileImage函数进行清理。
当调用此函数时,动态加载器在
objectFileImage
参数指向的内存上调用vm_deallocate
(/usr/include/mach/vm_map.h
)。
请注意,尽管这些函数已被弃用,但(据我所知)使用建议的替代dlopen
等。
相关文章:
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 在 Linux 平台的 C++ 中动态加载 DLL
- 在Qt C++单元测试中动态加载QQuickWindow而不是QQuickWidget
- 从动态加载的 dll 内部调用C++函数
- C/C++函数动态加载器(helper)
- 从动态加载的库中记录日志
- 如何将LLDB附加到C# .NET进程并调试动态加载的macOS捆绑包?
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- OpenGL 中的动态加载着色器毫无意义吗?
- 使用动态加载库时静态变量为空
- 在动态加载的位置无关的可执行文件中分离错误
- ASAN 检测与动态加载库共享的类的 vtable 的 ODR 违规
- 运行时动态加载库时出错"unresolved external symbol"
- 使用dlopen动态加载共享库
- LDD可执行OUPUT中没有动态加载库
- 调试Android Studio中动态加载的本机库
- C++ 动态加载 DLL 错误
- 动态加载库和运行时误解的显式链接
- 通过在C 中动态加载的LIB分配的基础级指针上调用删除的安全性
- mbed uvisor 动态加载二进制文件