157 votes

Comment puis-je voir le code d'assemblage pour un programme C++ ?

Comment puis-je voir le code d'assemblage d'un programme C++?

Quels sont les outils populaires pour le faire?

0 votes

Microsoft Visual C++ Express, définissez simplement un point d'arrêt et appuyez sur Alt +8

0 votes

0 votes

Lié: Comment supprimer le "bruit" de la sortie d'assemblage de GCC/clang? inclut des conseils pour créer des fonctions simples dont l'asm est intéressant à regarder (par exemple, les arguments de fonction au lieu de constantes), et un lien vers la conférence CppCon de Matt Godbolt sur ce qu'il faut chercher dans la sortie du compilateur.

192voto

Employed Russian Points 50479

Demander au compilateur

Si vous construisez le programme vous-même, vous pouvez demander à votre compilateur d'émettre du code source en assembleur. Pour la plupart des compilateurs UNIX, utilisez l'interrupteur -S.

  • Si vous utilisez l'assembleur GNU, la compilation avec -g -Wa,-alh affichera le code source et l'assembleur en mode entrelacé sur stdout (-Wa demande au pilote du compilateur de transmettre des options à l'assembleur, -al active la liste d'assemblage et -ah ajoute une liste de code source de " haut niveau "):

    g++ -g -c -Wa,-alh foo.cc

  • Pour Visual Studio, utilisez /FAsc.

Jeter un coup d'œil dans un binaire

Si vous avez un binaire compilé,

Utilisez votre débogueur

Les débogueurs peuvent également afficher le désassemblage.

  • Utilisez la commande disas dans GDB.
    Utilisez set disassembly-flavor intel si vous préférez la syntaxe Intel.
  • ou la fenêtre de désassemblage de Visual Studio sur Windows.

0 votes

J'ai tapé la commande disas et ça a fonctionné!.. mais pouvez-vous me dire comment je peux le voir dans la syntaxe Intel?

1 votes

Veuillez noter que objdump -drwC -S peut également désassembler avec un mélange de source + asm: Utiliser GCC pour produire un assemblage lisible ?. De plus, consultez Comment supprimer le "bruit" de la sortie d'assemblage de GCC/clang ? pour en savoir plus sur l'obtention d'une belle sortie de gcc -O2 -S

38voto

Zifre Points 14109

À GCC/G++, compilez avec -S. Cela produira un fichier something.s avec le code d'assemblage.

Éditez : Si vous voulez que la sortie soit en syntaxe Intel (qui est à mon avis beaucoup plus lisible, et la plupart des tutoriels d'assemblage l'utilisent), compilez avec -masm=intel.

6 votes

Ajoutez également l'option -fverbose-asm

0 votes

Si cela ne fonctionne pas pour vous, assurez-vous que la lettre S est en majuscule.

25voto

Viktor Sehr Points 5634

Dans Visual Studio;

  1. définir un point d'arrêt
  2. lancer le programme jusqu'à ce qu'il s'arrête au point d'arrêt
  3. clic droit sur le code source et choisir "afficher la désassemblage"

16voto

osgx Points 28675

Pour gcc/g++

gcc -save-temps -fverbose-asm prog.c

Cela générera prog.s avec des commentaires sur les variables utilisées dans chaque ligne asm:

    movl    $42, -24(%ebp)  #, readme
    movl    -16(%ebp), %eax # pid, pid
    movl    %eax, 4(%esp)   # pid,
    movl    $.LC0, (%esp)   #,
    call    printf  #

6voto

Adam Markowitz Points 4358

Le débogueur que vous utilisez devrait avoir une vue assemblée (Visual Studio, Borland IDE, gdb, etc.). Si vous n'utilisez pas de débogueur et que vous voulez simplement voir quel assemblage se trouve dans un programme, vous pouvez utiliser un désassembleur ou, alternativement, exécuter le programme et y attacher un débogueur pour faire le dump à partir de là. Consultez les références aux désassembleurs pour des informations sur les options.

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