使用dlsym加载命名的未导出符号?

时间:2011-05-15 14:12:10

标签: dlsym

是否可以使用dlsym从框架加载命名的未导出符号?

我想要导入的符号有一个名称,在框架中引用它。这是我需要打电话的功能。

我尝试按常规dlopen + dlsym方式执行此操作,但当我尝试加载未导出的符号时,dlsym会返回 NULL 指针。

1 个答案:

答案 0 :(得分:2)

dlsym只能加载符号表中列出的函数。您可以通过在相关框架上运行nm来列出符号表。

您可以在dyld源中验证这一点: ImageLoaderMachOClassic::findExportedSymbol是dlsym的内部实现,它只是二进制搜索符号表:

并且ImageLoaderMachO::parseLoadCmds从Mach头中的加载命令加载符号表: