有没有办法在不加载的情况下读取.so文件的内容?

Gur*_*uji 10 c++ shared-libraries shared-objects

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

我的用例场景是:

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

注意:我可以轻松地在DLL上执行这些操作.我也在Windows上工作,所以我无法加载.SO文件.

谢谢

TCA*_*n07 11

向屏幕: readelf -a <file>

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


ypn*_*nos 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获取信息: 如何在.so文件中列出符号

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