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