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
.
Utilisation de Macports :
port install binutils
gobjdump -p /path/to/app
Utilisation de Homebrew :
brew update && brew install binutils
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.
otool -l test.o
Vous pouvez essayer dwarfdump
.
Ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install binutils
greadelf filepath
greadelf
.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).