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

发布于 2024-11-07 16:20:38 字数 166 浏览 5 评论 0原文

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

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

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

Is it possible to load a named unexported symbol from a framework using dlsym?

The symbol I'm trying to import has a name by which it is referred to within the framework. It is a function I need to call.

I'm trying to do it the usual dlopen + dlsym way, but when I try to load a symbol that isn't exported, dlsym returns a NULL pointer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏至、离别 2024-11-14 16:20:38

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

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

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

dlsym can only load functions that are listed in the symbol table. You can list the symbol table by running nm on the framework in question.

You can verify this in the dyld source:
ImageLoaderMachOClassic::findExportedSymbol is the internal implementation of dlsym, it simply binary searches the symbol table:

And ImageLoaderMachO::parseLoadCmds loads the symbol table from the load commands in the Mach header:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文