【发布时间】:2011-05-15 14:12:10
【问题描述】:
是否可以使用 dlsym 从框架中加载命名的未导出符号?
我尝试导入的符号有一个名称,在框架内引用它。这是我需要调用的函数。
我正在尝试以通常的dlopen + dlsym 方式执行此操作,但是当我尝试加载未导出的符号时,dlsym 返回一个 NULL 指针。
【问题讨论】:
标签: dlsym
是否可以使用 dlsym 从框架中加载命名的未导出符号?
我尝试导入的符号有一个名称,在框架内引用它。这是我需要调用的函数。
我正在尝试以通常的dlopen + dlsym 方式执行此操作,但是当我尝试加载未导出的符号时,dlsym 返回一个 NULL 指针。
【问题讨论】:
标签: dlsym
dlsym 只能加载符号表中列出的函数。您可以通过在相关框架上运行 nm 来列出符号表。
您可以在 dyld 源代码中验证这一点:
ImageLoaderMachOClassic::findExportedSymbol 是 dlsym 的内部实现,它只是对符号表进行二进制搜索:
而ImageLoaderMachO::parseLoadCmds从马赫头中的加载命令加载符号表:
【讨论】:
dsymutil -s 向我显示了该符号,但 dlsym 没有找到它。见here。你怎么能找到这样的符号?