有没有一种方法可以在不加载它的情况下读取.so文件的内容?

18

有没有办法在不加载.SO(共享对象)文件的情况下查看其内容?

我的用例场景是:

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

注意:我可以轻松地在DLL上执行这些操作。同时,我正在Windows上工作,因此无法加载.so文件。

谢谢


这里有几个解决方案,不过不知道有没有Windows工具。https://dev59.com/UnVD5IYBdhLWcg3wRpaX - Atle
在Unix上,您可以从命令行执行此操作(尝试“man nm”)。您需要用C ++吗? - Axel
1
也许你会在'Cygwin'中找到合适的工具? - Nippey
我只需要在Windows上做吗?是的,用C++...@Axel - Guruji
3个回答

27
筛选内容:

筛选内容: readelf -a <file>

保存输出,将其转储到文件中。例如,我正在学习有关Python RPi.GPIO模块的知识,它存储在树莓派上的/usr/lib/python2.7/dist-packages/RPi中,因此我运行以下命令: readelf -a GPIO.so > ~/gpio.so.out

他在Windows操作系统上寻求帮助,这个回答与问题无关。 - El Don
需要Windows操作系统的解决方案。我使用了Android SDK/NDK中的ndk工具中存在的nm.exe工具。 - Guruji

5
您可以使用GNU binutils中提供的工具来读取这些文件。虽然GNU binutils通常安装在Linux系统上,但在Windows上并非如此。但是,在Windows下它们可以在Cygwin或MinGW中运行。
资源:
  1. Binutils:http://www.gnu.org/software/binutils/
  2. Cygwin: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++程序中,您可以将这些工具的源代码合并到您的程序中(请注意许可证!)或从您的程序内部调用它们。可能需要在Windows下获取Cygwin环境才能使源代码编译。

1

我需要解决Windows操作系统的问题。我使用了Android SDK/NDK中的NDK工具中存在的nm.exe工具。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接