适用于Mac OS X的类似readelf的工具?

kar*_*lip 51 c macos symbols function

是否有用于读取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
Run Code Online (Sandbox Code Playgroud)

在这个例子中,print是一个在运行时从共享库(我写的)加载的函数. readelf能够显示有关其在app二进制文件内的位置的信息.

cbe*_*nna 85

使用Macports:

  1. 安装macports.
  2. 使用macports port install binutils
  3. gobjdump -p /path/to/app

使用Homebrew:

  1. 安装Homebrew
  2. brew update && brew install binutils
  3. /usr/local/path/to/gobjdump -p /path/to/app

当然,还有许多其他命令行选项.请注意,binutils端口警告说,安装它可能会导致其他端口无法构建.将它安装到端口安装/查看某些东西/端口卸载仍然可以很方便.

令人惊讶的是,还没有一些原生工具可以做到这一点.

  • 如果您使用Homebrew,那么您可以通过"brew install binutils"安装它. (26认同)
  • 对于Homebrew用户,正如@louielouie所提到的那样,`brew install binutils`然后所有工具都将以`g`为前缀,即`greadelf`.请参阅https://github.com/Homebrew/homebrew/blob/master/Library/Formula/binutils.rb (17认同)

erg*_*sys 18

otool -l test.o


Pet*_*sey 6

你可以试试dwarfdump.

???????????

  • +1 在 Apple 工具链中可用。安装 Xcode 后,它在 `/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dwarfdump` 中可用。 (3认同)

Jic*_*hao 6

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install binutils
greadelf filepath
Run Code Online (Sandbox Code Playgroud)
  1. 安装自制软件.
  2. 使用homebrew来安装binutils
  3. binutils中的readelf被调用greadelf.

  • greadelf 需要一个标志 (2认同)
  • @hqzxzwb brew 不会自动将 binutils 添加到您的路径中,因为“它会隐藏主机工具链”。尝试运行 /opt/homebrew/opt/binutils/bin/greadelf (或者您的brew安装存储东西的任何地方)。 (2认同)

car*_*ips 5

你试过ObjConv吗?http://agner.org/optimize/#objconv

此实用程序可用于在所有32位和64位x86平台的COFF/PE,OMF,ELF和Mach-O(由Mac OS使用)格式之间转换目标文件.可以修改目标文件中的符号名称.可以跨平台构建,修改和转换函数库.可以转储目标文件和可执行文件.还包括一个非常好的反汇编程序,支持SSE4,AVX,FMA和XOP指令集.

Ps.:包含源代码(GPL).

  • 也很高兴见到你.另外,请查看此http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html (3认同)