Comment puis-je voir le code d'assemblage d'un programme C ++?
Quels sont les outils populaires pour y parvenir?
Comment puis-je voir le code d'assemblage d'un programme C ++?
Quels sont les outils populaires pour y parvenir?
Réponses:
Si vous créez vous-même le programme, vous pouvez demander à votre compilateur d'émettre le code source de l'assembly. Pour la plupart des compilateurs UNIX, utilisez le-S
commutateur.
Si vous utilisez l'assembleur GNU, la compilation avec -g -Wa,-alh
donnera une source et un assemblage mélangés sur stdout ( -Wa
demande au pilote du compilateur de transmettre les options à l'assembleur, -al
active la liste des assembleurs et -ah
ajoute la liste des «sources de haut niveau»):
g++ -g -c -Wa,-alh foo.cc
Pour Visual Studio, utilisez /FAsc
.
Si vous avez compilé le binaire,
objdump -d a.out
sous UNIX (fonctionne également pour cygwin),dumpbin /DISASM foo.exe
sur Windows.Les débogueurs pourraient également afficher de manière disassable.
disas
commande dans GDB,Dans GCC / G ++, compilez avec -S
. Cela produira un something.s
fichier avec le code d'assemblage.
Edit: Si vous voulez que la sortie soit dans la syntaxe Intel (qui est IMO, beaucoup plus lisible, et la plupart des tutoriels d'assemblage l'utilisent), compilez avec -masm=intel
.
-fverbose-asm
option
Dans Visual Studio ;
Ce site travaille actuellement pour moi (2017): https://godbolt.org/
Beaucoup de gens ont déjà expliqué comment émettre du code d'assemblage avec un compilateur donné. Une autre solution consiste à compiler un fichier objet et à le vider avec un outil tel que objdump , readelf (sous Unix) ou DUMPBIN ( link ) (sous Windows). Vous pouvez également vider un exécutable, mais il sera plus difficile de lire la sortie.
Cela a l'avantage de fonctionner de la même manière avec n'importe quel compilateur.
Quel que soit le débogueur que vous utilisez, vous devez avoir une vue d'assembly (Visual Studio, Borland IDE, gdb, etc.). Si vous n'utilisez pas de débogueur et que vous voulez simplement voir quel assembly est dans un programme, vous pouvez utiliser un désassembleur ou, alternativement, exécuter le programme et y attacher avec un débogueur et faire le vidage à partir de là. Consultez les références aux désassembleurs pour plus d'informations sur les options.
Comme quelqu'un l'a mentionné, le débogueur de votre plate-forme est un bon point de départ. Pour le marteau-piqueur de tous les débogueurs et désassembleurs, jetez un œil à IDA Pro.
Sur les plates-formes Unix / Linux (y compris Cygwin), vous pouvez utiliser objdump --disassemble <executable>
.
La plupart des compilateurs ont une option pour générer une liste d'assembly. Par exemple, avec VisualStudio, vous pouvez utiliser quelque chose comme:
cl.exe /FAfile.asm file.c
Pour une meilleure lisibilité cependant, la plupart des débogueurs offriront une vue qui entrelace le désassemblage avec la source d'origine, afin que vous puissiez comparer votre code avec la sortie du compilateur ligne par ligne.
Désassembleur PE Explorer pour les fichiers PE 32 bits. IDA pour les autres.
Vous pouvez également essayer ce site: http://assembly.ynh.io/
Là, vous pouvez coller votre code C ou C ++ et appuyer sur un bouton bleu pour voir la version équivalente de l'assembly.
Dans Visual Studio, vous pouvez générer la liste de l'assembleur pour un projet C ++.
Accédez aux propriétés du projet, puis à C ++ / Fichiers de sortie et définissez le paramètre de sortie de l'assembleur et l'emplacement de la liste ASM sur un nom de fichier.
Si vous êtes un utilisateur Eclipse, vous pouvez utiliser la vue Désassemblage .
La vue Désassemblage montre le programme chargé sous forme d'instructions assembleur mélangées à du code source à des fins de comparaison. La ligne en cours d'exécution est indiquée par une flèche et mise en surbrillance dans la vue. Vous pouvez effectuer les tâches suivantes dans la vue Désassemblage:
- Définir des points d'arrêt au début de toute instruction d'assembleur
- Activer et désactiver les points d'arrêt et leurs propriétés
- Suivez les instructions de démontage de votre programme
- Aller aux instructions spécifiques dans le programme
Alt +8