【问题标题】:How to view definition of functions of a dynamic library file (.dylib)?如何查看动态库文件(.dylib)的函数定义?
【发布时间】:2018-05-31 07:36:08
【问题描述】:

所以我有一个名为“libxlearn_api.dylib”的动态库文件。我可以通过

从 python 代码中加载这个库
lib = ctypes.cdll.LoadLibrary(/path/to/lib)

我还可以看到上面的库中通过dir(lib)定义了哪些函数。 但是,这只是给出了其中的函数名称列表。

我需要查看这些函数的描述/定义(它们是如何编写/实现的,即实际代码。)

我该怎么做?

【问题讨论】:

  • 您使用的是哪个 IDE?你可以右键单击库或函数并单击“转到定义”吗?
  • @BerkUtkuYenisey 我正在使用 Sublime 进行编码,然后从终端运行它。右键单击时没有“转到定义”选项。在 sublime 中加载 dylib 也无济于事。只是十六进制垃圾。
  • 请查看stackoverflow.com/questions/4506121/…,如果您想单独从库中获取更多信息,您可以使用逆向工程工具,例如IDA
  • 您确定没有一种简单的方法可以做到这一点,即不使用某种软件吗?

标签: python c shared-libraries dylib


【解决方案1】:

我需要查看这些函数的描述/定义(它们是如何编写/实现的,即实际代码。)

一般情况下,您不能,因为动态库可能是proprietary(MacOSX 上许多与 GUI 相关的库都是这种情况,请阅读Aqua)。

如果库是free software,或者通过某些(合法的)手段您已经获得了它的源代码(可能在签署了一些 NDA 并支付了一些钱之后),您可能会研究它的源代码。然后您最好从源代码构建该库(以确保二进制库和源代码匹配),否则您需要信任二进制库的提供者,它与您拥有的源代码完全对应。

顺便说一句,xlearn 是免费软件。也许它与您的二进制动态库相同(但您需要检查)。我建议能够从其源代码构建它(在终端中,使用命令)。请参阅其installation guide,部分:从源代码安装。

【讨论】:

  • Xlearn 是一个免费使用 python 库来实现某些机器学习算法。它很容易在 github 上获得 github.com/aksnzhy/xlearn
  • 所以问题是,我需要对源代码进行一些小改动来实现我想要的。我是否必须重新编写整个库才能添加几行?
  • 您需要修补该库的源代码并重建其二进制dylib。如果您不知道这意味着什么或如何做到这一点,请放弃您的任务。我建议首先能够从其源代码构建该库(首先,无需更改它)。您可能希望启用调试信息(通过将-g 传递给您的gccclang 编译器)。
  • 感谢您的提醒,尝试总比放弃好:)。您可以建议任何对我有帮助的教程吗?
  • 我不知道你的编程和系统管理技能(而且我不在你的电脑前),所以不,我帮不了你。你需要学习。在输入命令之前阅读内容。避免将 GUI 用于系统管理员任务(使用命令构建第三方免费软件要好得多)。把你尝试过的写在纸上。有条不紊。了解编译器不是 IDE。
猜你喜欢
  • 1970-01-01
  • 2022-08-12
  • 2011-04-10
  • 2011-08-12
  • 2010-09-16
  • 2011-11-10
  • 2014-08-09
  • 2016-02-15
  • 2011-06-03
相关资源
最近更新 更多