【问题标题】:Load named unexported symbols with dlsym?使用 dlsym 加载命名的未导出符号?
【发布时间】:2011-05-15 14:12:10
【问题描述】:

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

我尝试导入的符号有一个名称,在框架内引用它。这是我需要调用的函数。

我正在尝试以通常的dlopen + dlsym 方式执行此操作,但是当我尝试加载未导出的符号时,dlsym 返回一个 NULL 指针。

【问题讨论】:

    标签: dlsym


    【解决方案1】:

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

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

    ImageLoaderMachO::parseLoadCmds从马赫头中的加载命令加载符号表:

    【讨论】:

    • 我有一个案例,dsymutil -s 向我显示了该符号,但 dlsym 没有找到它。见here。你怎么能找到这样的符号?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多