readelf-comme outil pour Mac OS X? [fermé]

Existe-t-il un outil pour lire les binaires Mac OS X qui imprimerait des informations sur les tables de relocation et les décalages de symboles similaires à ceci readelf sortie?

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

Dans cet exemple, print est une fonction chargée à partir d'une bibliothèque partagée (j'ai écrit) à l'exécution. readelf est capable d'Afficher des informations sur son emplacement à l'intérieur du app binaire.

39
demandé sur AstroCB 2010-07-20 06:52:36

5 réponses

en utilisant Macports:

  1. Installer macports.
  2. utiliser macports port install binutils
  3. gobjdump -p /path/to/app

en utilisant Homebrew:

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

il y a, bien sûr, beaucoup d'autres options en ligne de commande. Notez que le port binutils prévient que son installation peut causer d'autres ports à ne pas construire. L'avoir autour de l'installation de port / regarder quelque chose / Désinstaller de port peut encore être pratique.

c'est assez étonnant qu'il n'y ait pas déjà d'outil natif pour faire ça.

68
répondu cbehanna 2016-08-04 09:20:58

otool -l de test.o

15
répondu ergosys 2010-07-20 03:13:44

Vous pouvez essayer dwarfdump.

⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣

6
répondu Peter Hosey 2018-02-12 18:15:57

avez-vous essayé ObjConv? http://agner.org/optimize/#objconv

cet utilitaire peut être utilisé pour convertir des fichiers d'objets entre les formats COFF/PE, OMF, ELF et Mach-O (utilisés par Mac OS) pour toutes les plateformes 32-bit et 64-bit x86. Peut modifier les noms de symboles dans les fichiers d'objets. Peut construire, Modifier et convertir des bibliothèques de fonctions à travers des plateformes. Peut vider des fichiers d'objets et des fichiers exécutables. Comprend également un très bon démonteur supportant les instructions SSE4, AVX, FMA et XOP définir.

Ps.: Le code source est inclus (GPL).

5
répondu carlfilips 2010-07-27 00:01:53
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install binutils
greadelf filepath
  1. installer homebrew.
  2. utilisez homebrew pour installer binutils
  3. le readelf dans binutils est appelé greadelf.
4
répondu Jichao 2015-06-19 09:44:23