有没有办法在不加载的情况下读取.SO(共享对象)文件的内容?
我的用例场景是:
注意:我可以轻松地在DLL上执行这些操作。此外,我正在Windows上工作,所以我无法加载.SO文件。
由于
答案 0 :(得分:8)
要筛选:readelf -a <file>
要保存输出,请将其转储到文件中。例如,我正在学习Raspberry Pi上的Python RPi.GPIO模块,它存储在/usr/lib/python2.7/dist-packages/RPi中,所以我运行:
readelf -a GPIO.so > ~/gpio.so.out
答案 1 :(得分:4)
您可以使用GNU binutils中包含的工具阅读这些文件。虽然GNU binutils通常安装在Linux系统上,但Windows并非如此。但是,它们在Windows下运行Cygwin或minGW。
资源:
请注意,使用MinGW(3.),您不需要Cygwin(2.)并自己编译Binutils(1.)。 Binutils包含在MinGW(3.)中,但你也可以尝试下载MinGW的Binutils部分(4。)。
此处说明如何使用nm
和readelf
获取信息:
How do I list the symbols in a .so file
如果要将此功能包含在C ++程序中,您可以合并这些工具的源代码(注意许可证!)或在程序中调用它们。可能你需要一个Cygwin环境来在Windows下编译源代码。
答案 2 :(得分:1)
是Windows操作系统所需的解决方案。我使用了android sdk / ndk中的ndk工具中的nm.exe工具。
我将nm.exe的输出转储到某个文件中,然后使用正则表达式从中提取出所有类和方法。