Mac OS X 的类似 readelf 的工具? [关闭]
Posted
技术标签:
【中文标题】Mac OS X 的类似 readelf 的工具? [关闭]【英文标题】:readelf-like tool for Mac OS X? [closed] 【发布时间】:2011-03-18 05:34:10 【问题描述】:是否有用于读取 Mac OS X 二进制文件的工具,可以打印与 readelf
输出类似的重定位表和符号偏移信息?
readelf -r app
Relocation section '.rel.dyn' at offset 0x5ec contains 2 entries:
Offset Info Type Sym.Value Sym. Name
08049d58 00001706 R_386_GLOB_DAT 00000000 __gmon_start__
08049d60 00000305 R_386_COPY 08049d60 _ZSt4cout
Relocation section '.rel.plt' at offset 0x5fc contains 13 entries:
Offset Info Type Sym.Value Sym. Name
08049d24 00000107 R_386_JUMP_SLOT 0804868c print
08049d28 00000207 R_386_JUMP_SLOT 0804869c _ZNSt8ios_base4InitC1E
08049d2c 00000507 R_386_JUMP_SLOT 080486ac _ZStlsISt11char_traits
08049d30 00000607 R_386_JUMP_SLOT 080486bc _ZNSolsEPFRSoS_E
08049d34 00000707 R_386_JUMP_SLOT 08048664 _init
08049d38 00000807 R_386_JUMP_SLOT 080486dc sleep
08049d3c 00000907 R_386_JUMP_SLOT 080486ec _ZNKSsixEj
08049d40 00000b07 R_386_JUMP_SLOT 080486fc _ZNKSs4sizeEv
08049d44 00000c07 R_386_JUMP_SLOT 0804870c __libc_start_main
08049d48 00000d07 R_386_JUMP_SLOT 08048ae4 _fini
08049d4c 00001307 R_386_JUMP_SLOT 0804872c _ZSt4endlIcSt11char_tr
08049d50 00001507 R_386_JUMP_SLOT 0804873c __gxx_personality_v0
08049d54 00001607 R_386_JUMP_SLOT 0804874c _ZNSt8ios_base4InitD1E
在此示例中,print
是在运行时从共享库(我编写的)加载的函数。 readelf
能够在 app
二进制文件中显示有关其位置的信息。
【问题讨论】:
nm
能解决问题吗?
它没有打印足够的信息。
【参考方案1】:
使用Macports:
-
Install macports。
使用 macports
port install binutils
gobjdump -p /path/to/app
使用Homebrew:
-
Install Homebrew
做
brew update && brew install binutils
/usr/local/path/to/gobjdump -p /path/to/app
# 或按照说明将其添加到您的 PATH 中
当然,还有许多其他命令行选项。请注意 binutils 端口警告安装它可能会导致其他端口无法构建。使用它进行端口安装/查看某些内容/端口卸载仍然很方便。
令人惊讶的是,还没有一些本地工具可以做到这一点。
【讨论】:
如果你使用 Homebrew,那么你可以通过“brew install binutils”安装它。 对于 Homebrew 用户,正如@louielouie 提到的,brew install binutils
那么所有工具都将以g
为前缀,即greadelf
。见github.com/Homebrew/homebrew/blob/master/Library/Formula/…
我收到一条消息:gobjdump: Matching formats: elf32-littlearm elf32-littlearm-symbian elf32-littlearm-vxworks
@IgorGanapolsky 你可以使用 greadelf -Ws /path/to/your/so/files【参考方案2】:
你可以试试dwarfdump
。
【讨论】:
+1 感谢那些处理 dwarf 调试信息的人的好工具 +1 适用于 Apple 工具链。安装 Xcode 后可在/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dwarfdump
获取。
虽然您通常不需要完整路径:您可以使用xcrun dwarfdump
。你可能有/usr/bin/dwarfdump
作为它的快捷方式,这意味着你只需输入dwarfdump
就可以了。【参考方案3】:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install binutils
greadelf filepath
-
安装自制软件。
使用 homebrew 安装 binutils
binutils 中的 readelf 称为
greadelf
。
【讨论】:
greadelf 需要一个标志 使用greadelf -a <binary>
,-a
标志代表转储所有内容的所有选项【参考方案4】:
你试过 ObjConv 吗? http://agner.org/optimize/#objconv
此实用程序可用于在所有 32 位和 64 位 x86 平台的 COFF/PE、OMF、ELF 和 Mach-O(Mac OS 使用)格式之间转换目标文件。可以修改目标文件中的符号名称。可以跨平台构建、修改和转换函数库。可以转储目标文件和可执行文件。还包括一个非常好的反汇编程序,支持 SSE4、AVX、FMA 和 XOP 指令集。
Ps.:源代码已包含(GPL)。
【讨论】:
很高兴认识你 carlfilips,谢谢。 很高兴认识你。另外,看看这个developer.apple.com/mac/library/documentation/DeveloperTools/…【参考方案5】:otool -l test.o
【讨论】:
不,它也不起作用。 你可以用 otool 做到这一点,你只需要传递额外的选项。 man otool 了解详细信息。otool -Sv libtest.a
更好,或者otool -STMRIHGv <path/to/library>
适用于任何类型的库(*.a
、*.so
、*.dylib
)。安装 Xcode 后,otool
在/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool
可用。
不幸的是,我需要对 .so
文件执行此操作。以上是关于Mac OS X 的类似 readelf 的工具? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Mac OS X 平台上都有哪些好用且免费的MySQL客户端工具