Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

readelf-like tool for Mac OS X? [closed]

Is there a tool for reading Mac OS X binaries that would print information about relocation tables and symbol offsets similar to this readelf output?

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 

In this example, print is a function loaded from a shared library (I wrote) at runtime. readelf is able to display information about its location inside the app binary.

like image 237
karlphillip Avatar asked Jul 20 '10 02:07

karlphillip


1 Answers

Using Macports:

  1. Install macports.
  2. Using macports port install binutils
  3. gobjdump -p /path/to/app

Using Homebrew:

  1. Install Homebrew
  2. Do brew update && brew install binutils
  3. /usr/local/path/to/gobjdump -p /path/to/app # or follow instructions to add it to your PATH

There are, of course, many other command-line options. Note that the binutils port cautions that installing it may cause other ports to fail to build. Having it around to port install/look at something/port uninstall can still be handy.

It's rather amazing that there isn't already some native tool to do this.

like image 153
cbehanna Avatar answered Sep 20 '22 11:09

cbehanna