Je sais que je peux obtenir l'assembleur code source em> généré par le compilateur à l'aide de: même si cela ne me donne pas de fichier objet une partie du processus. P> Mais comment puis-je tout obtenir sur le code compilé? Je veux dire des adresses, les octets générés et ainsi de suite. P> Les instructions de sortie par GCC -S -S code> ne me disent rien des longueurs d'instruction ou de codages, ce que je veux voir . p> p>
5 Réponses :
Cela me semble comme si vous voulez un désassembleur. objdump code> est à peu près le standard (
otool code> sur Mac OS X); En concert avec toutes les informations de fichier de carte que votre linker vous donne, le démontage de votre fichier d'objet devrait vous donner tout ce que vous voulez. P>
GCC produira un fichier source de langage de montage. Vous pouvez ensuite utiliser tel que -a votrefile.s code> pour produire une liste comprenant des compensations et des octets codés pour chaque instruction.
-A code> a également quelques sous-options pour contrôler ce qui s'affiche dans le fichier de liste (
comme --Help code> donnera une liste d'entre eux avec les autres options disponibles). p>
nasm -f elf xx.asm -l x.lst gcc xx.c xx.o -o xx generates a 'list' file x.lst which is only for xx.asmfor xx.c along with xx.asm you can compile them both and then use 'gdb' - gnu debugger
J'aime l'appel alors, je trouve utile de voir chaque ligne annotée sous forme mais il s'avère que vous pouvez annuler cela en fournissant l'option une autre em> obscure, arrivant enfin à mon préféré qui donne une sortie comme ceci: < / p> et si vous avez construit avec des symboles de débogage (c.-à-d. compilé avec objdump code> pour cela, mais les options les plus utiles sont non évidentes - surtout si vous l'utilisez sur un fichier d'objet contenant des déménagements, plutôt qu'un binaire final.
objdump -d quelque_binary code> fait un travail raisonnable. p>
objdump -d quelque_Object.o code> est moins utile car les appels vers des fonctions externes ne sont pas démontés utiles. : p>
code> est en réalité sur
printf () code> ... Ajout du
-r code> le drapeau aide à cela; Il marque les relocalisations.
objdump -dr quelque_Object.o code> donne: p>
Objdump Code> a une option pratique pour cela, mais il a l'effet secondaire ennuyeux de désactiver la vidage des octets réels -
objdump --prefix-adresses -DR quelque_Object.o code> donne: p>
objdump Code> Incantation: P>
Objdump --Prefix-Adresses --Show-raw-insn -dr file.o code> p>
-g code>), et vous remplacez le
-dr code > Avec
-srl code>, il tentera d'annoter la sortie avec les lignes source correspondantes. P> p>
Le moyen le plus simple d'obtenir une liste rapide consiste à utiliser l'option -A code> sur l'assembleur, que vous pouvez effectuer en mettant
-wa, -a code> sur le < Code> GCC code> ligne de commande. Vous pouvez utiliser divers modificateurs vers la option pour affecter exactement ce qui sort - voir la page AS (1) Man. P>
Dupliqué possible de Utilisation de GCC pour produire un assemblage lisible?