2010-07-20 16 views
36

Esiste uno strumento per la lettura di file binari di Mac OS X che consente di stampare informazioni sulle tabelle di rilocazione e gli offset di simbolo simili a questo output readelf?strumento simile a quello di lettura per Mac OS X?

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 questo esempio, print è una funzione caricato da una libreria condivisa (ho scritto) in fase di esecuzione. readelf è in grado di visualizzare informazioni sulla sua posizione all'interno del binario app.

+1

Sarebbe 'nm' fare il trucco? – zneak

+0

Non stampa informazioni sufficienti. – karlphillip

risposta

61

Utilizzando Macports:

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

Uso Homebrew:

  1. Install Homebrew
  2. Fare brew update && brew install binutils
  3. gobjdump -p /path/to/app

Ci sono, naturalmente, molte altre opzioni da linea di comando. Si noti che la porta binutils avverte che l'installazione potrebbe causare il mancato sviluppo di altre porte. Avere in giro per installare porta/guardare qualcosa/porta disinstallare può ancora essere utile.

È piuttosto sorprendente che non ci sia già uno strumento nativo per farlo.

+26

Se si utilizza Homebrew, è possibile installarlo tramite "brew install binutils". – louielouie

+16

Per gli utenti di Homebrew, come menzionato da @louielouie, 'brew install binutils', tutti gli strumenti saranno preceduti da un' g', cioè 'greadelf'. Vedi https://github.com/Homebrew/homebrew/blob/master/Library/Formula/binutils.rb – acw

+0

Ricevo un messaggio: 'gobjdump: formati di corrispondenza: elf32-littlearm elf32-littlearm-symbian elf32-littlearm-vxworks' –

14

otool -l test.o

+0

No, anche questo non fa il trucco. – karlphillip

+1

Puoi farlo con otool, devi solo passare altre opzioni. uomo otool per i dettagli. –

+0

'otool -Sv libtest.a' è più bello, o 'otool -STMRIHGv ' per qualsiasi tipo di libreria ('* .a',' * .so', '* .dylib'). 'otool' è disponibile in'/Applicazioni/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool' dopo l'installazione di Xcode. –

5

Hai provato ObjConv?

Questa utilità può essere utilizzata per la conversione di file di oggetto tra i formati COFF/PE, OMF, ELF e Mach-O (utilizzati da Mac OS) per tutte le piattaforme x86 a 32 e 64 bit. Può modificare i nomi dei simboli nei file oggetto. Può costruire, modificare e convertire librerie di funzioni su piattaforme. Può eseguire il dump di file oggetto e file eseguibili. Include anche un ottimo disassemblatore che supporta i set di istruzioni SSE4, AVX, FMA e XOP.

Ps .: il codice sorgente è incluso (GPL).

+0

Piacere di conoscerti carlfilips, e grazie. – karlphillip

+3

Piacere di conoscerti. Inoltre, dai un'occhiata a questo http://developer.apple.com/it/mac/library/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html – carlfilips

6

Si potrebbe provare dwarfdump.

⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣

+0

+1 grazie allo strumento di cui hai bisogno per chi si occupa di informazioni di debug nano – Bogatyr

+1

+1 per disponibile nella toolchain di Apple. È disponibile in/Applicazioni/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dwarfdump' dopo l'installazione di Xcode. –

+0

Anche se generalmente non è necessario il percorso completo: puoi semplicemente usare 'xcrun dwarfdump'. E potresti avere '/ usr/bin/dwarfdump' come scorciatoia per quello, il che significa che puoi semplicemente digitare' dwarfdump' e funzionerà. –

3
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 
brew install binutils 
greadelf filepath 
  1. installare homebrew.
  2. utilizzare homebrew per installare binutils
  3. il file in binutils si chiama greadelf.
+0

greadelf richiede una bandiera –