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.
Using Macports:
port install binutils
gobjdump -p /path/to/app
Using Homebrew:
brew update && brew install binutils
/usr/local/path/to/gobjdump -p /path/to/app
# or follow instructions to add it to your PATHThere 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With