web-dev-qa-db-fra.com

un outil de lecture pour Mac OS X?

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

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) au moment de l'exécution. readelf est capable d'afficher des informations sur son emplacement dans le binaire app.

49
karlphillip

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. Faire brew update && brew install binutils
  3. gobjdump -p /path/to/app

Il existe bien sûr de nombreuses autres options en ligne de commande. Notez que le port binutils prévient que son installation peut entraîner l'échec de la construction d'autres ports. Il est toujours utile de l'avoir pour installer/regarder quelque chose/désinstaller un port.

C'est assez étonnant qu'il n'y ait pas déjà d'outil natif pour le faire.

81
cbehanna

otool -l test.o

18
ergosys

Vous pouvez essayer dwarfdump .

⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣

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

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 plates-formes x86 32 bits et 64 bits. Peut modifier les noms de symboles dans les fichiers objets. Peut créer, modifier et convertir des bibliothèques de fonctions sur différentes plates-formes. Peut vider les fichiers objets et les fichiers exécutables. Comprend également un très bon démonteur prenant en charge les jeux d'instructions SSE4, AVX, FMA et XOP.

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

5
carlfilips