g++ -c xyz.cpp
crée un fichier objet xyz.o
Mais quand je l'ouvre dans l'éditeur vim, il affiche un texte fou ...
Comment puis-je voir le code machine?
Quel paquet peut utiliser pour ouvrir et voir ce code machine?
Découvrez le package binutils
.
Vous y trouverez objdump - affiche des informations à partir de fichiers objets.
Ensuite, essayez de lancer objdump -d xyz.o
.
Le code machine généré par votre compilateur n'est pas censé être lisible par l'homme, mais plutôt complètement optimisé pour s'exécuter aussi rapidement que possible sur votre processeur.
Cependant, vous pouvez lire les symboles des fichiers binaires comme ceci:
$ nm main.o | c++filt
U _Unwind_Resume
U FactoryImpl::FactoryImpl()
U UI::UI(Subject*)
U operator delete(void*)
U operator new(unsigned long)
U __gxx_personality_v0
0000000000000000 T main
Remarques:
nm
et c++filt
proviennent du package binutils
que vous avez probablement déjà en cours de développement. Je viens de me rendre compte que ma réponse ne répondait pas vraiment à votre question sur la lecture du code machine réel. Cependant, je pense qu’il fournit plutôt des informations utiles. Pour lire les opérations de niveau processeur de votre processeur, utilisez objdump -d
tel que proposé par @hnasarat
Vous devez utiliser le drapeau -S
pour créer le code Assembly du compilateur.
Ainsi, pour votre exemple, le code serait g++ -S xyz.cpp
et l’Assemblée serait imprimée sous xyz.s
.