【问题标题】:Is there a way to read the contents of .so file without loading it?有没有办法在不加载的情况下读取 .so 文件的内容?
【发布时间】:2013-10-24 03:10:53
【问题描述】:

有什么方法可以在不加载的情况下读取 .SO(共享对象)文件的内容?

我的用例场景是:

  1. 我在 Windows 上有一个 .so 文件。我需要查询一些方法是否存在于 .so 中。
  2. 了解 .so 文件中的所有类。
  3. 给定一个类名需要找到这个类上的所有方法。

注意:我可以很容易地在 DLL 上做这些事情。我也在 Windows 上工作,所以我无法加载 .SO 文件。

谢谢

【问题讨论】:

  • 这里有一些解决方案,但不知道任何windows-tools。 stackoverflow.com/questions/34732/…
  • 在 unix 上,您可以从命令行执行此操作(尝试man nm)。你在 C++ 中需要它吗?
  • 也许你会在 'Cygwin' 中找到合适的工具?
  • 我只需要在windows上做..?在 C++ 中是的 ...@Axel

标签: c++ shared-objects shared-libraries


【解决方案1】:

到屏幕:readelf -a <file>

要保存输出,请将其转储到文件中。例如,我正在学习 Raspberry Pi 上的 Python RPi.GPIO 模块,该模块存储在 /usr/lib/python2.7/dist-packages/RPi 中,所以我运行: readelf -a GPIO.so > ~/gpio.so.out

【讨论】:

  • 他在 Windows 操作系统上寻求帮助,这个答案我无关
  • 是的,需要 Windows 操作系统的解决方案。我使用了 android sdk/ndk 中的 ndk 工具中的 nm.exe 工具
【解决方案2】:

您可以使用 GNU binutils 中包含的工具来阅读这些文件。虽然 GNU binutils 通常安装在 Linux 系统上,但 Windows 并非如此。但是,它们在 Windows 下的 Cygwin 或 minGW 中运行。

资源:

  1. Binutils:http://www.gnu.org/software/binutils/
  2. 赛格温:http://www.cygwin.com/
  3. MinGW:http://www.mingw.org/
  4. MinGW Binutils:http://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/

请注意,使用 MinGW (3.),您不需要 Cygwin (2.) 并自己编译 Binutils (1.)。 Binutils 包含在 MinGW (3.) 中,但您也可以尝试仅下载 MinGW (4.) 的 Binutils 部分。

这里解释了如何使用nmreadelf获取信息: How do I list the symbols in a .so file

如果您想将此功能包含到 C++ 程序中,您可以合并这些工具的源代码(注意许可证!)或从您的程序中调用它们。可能你需要一个 Cygwin 环境才能在 Windows 下编译源代码。

【讨论】:

    【解决方案3】:

    是的,需要 Windows 操作系统的解决方案。我使用了 android sdk/ndk 中的 ndk 工具中的 nm.exe 工具。

    我将 nm.exe 的输出转储到某个文件中,然后使用正则表达式从中提取所有类和方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-10
      • 2021-11-04
      • 2020-09-12
      • 2019-10-01
      • 2015-07-05
      • 2017-06-20
      • 2015-03-05
      • 2019-04-12
      相关资源
      最近更新 更多