【发布时间】:2015-03-11 17:19:51
【问题描述】:
我有一个 .SO 文件(注意,不是 .a,不是 .dylib,也不是 .o),我需要在 OSX 上从中获取符号信息。
我试过了
nm -gU lib.so
但是,什么都没有打印出来。
我不能使用 otool,因为它不是目标文件,而且 OSX 上不存在 readelf。如何获取符号信息?
请注意,我在另一个项目中使用这个 .so 文件,并且有符号信息。我能够加载库,并从中引用函数。但是,我还没有在 OSX 上找到可以让我从中打印符号信息的工具。
如被问及,
file lib.so
ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, stripped
【问题讨论】:
-
文件的实际类型是什么(不是它的文件扩展名,这不是决定性的)?
file lib.so输出什么?顺便说一句,MacPorts 支持各种与 ELF 相关的包。例如,看起来elftoolchain包包含一个readelf工具。i386-elf-binutils或x86_64-elf-binutils也可能有一些有用的东西。我确信其他包系统也有类似的包。 -
这是一个 ARM 二进制文件。 x86/x64 工具能否理解它?
-
因为 OSX 使用 Mach-O 二进制格式,而不是 ELF。因此,
nm等实用程序不处理 ELF 格式。他们也不会使用相同的命令行语法。我描述了如何在 Linux 上为 Mach-O 文件构建和安装binutils。您可能想要编译binutils以在 OSX/Darwin 上运行(托管),但--target需要是arm-elf或一些变体。我不记得具体的 ARM 架构,但可能有构建选项可以处理从旧 ARM 版本到 AArch64 的所有内容。 -
果然,如果你安装了 MacPorts 之类的东西,已经有为此构建的包:
port list | grep -i binutils列出了几个包,如:arm-elf-binutils