67 votes

Outil de lecture pour Mac OS X ?

Existe-t-il un outil permettant de lire les binaires Mac OS X et d'imprimer des informations sur les tables de relocalisation et les décalages de symboles, comme 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 depuis une bibliothèque partagée (que j'ai écrite) au moment de l'exécution. readelf est en mesure d'afficher des informations sur sa position à l'intérieur de l'UE. app binaire.

102voto

VihangaAW Points 101

Utilisation de Macports :

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

Utilisation de Homebrew :

  1. Installer Homebrew
  2. Faites brew update && brew install binutils
  3. /usr/local/path/to/gobjdump -p /path/to/app # ou suivez les instructions pour l'ajouter à votre PATH

Il existe, bien sûr, de nombreuses autres options de ligne de commande. Notez que le port binutils prévient que son installation peut provoquer l'échec de la construction d'autres ports. L'avoir à portée de main pour installer/regarder quelque chose/désinstaller le port peut toujours être pratique.

Il est assez étonnant qu'il n'y ait pas déjà un outil natif pour faire cela.

22voto

ergosys Points 15343

Otool -l test.o

10voto

Jichao Points 5680
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install binutils
greadelf filepath
  1. installer homebrew.
  2. utiliser homebrew pour installer binutils
  3. le readelf dans binutils s'appelle greadelf .

5voto

carlfilips Points 1485

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

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

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

-5voto

user181309 Points 41

Trouvez un elfdump open source. Récupérez les sources et compilez-les sur votre plateforme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X