web-dev-qa-db-fra.com

Comment voir le code objet généré par g ++?

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?

6
Sam

Découvrez le package binutils.

Vous y trouverez objdump - affiche des informations à partir de fichiers objets.

Ensuite, essayez de lancer objdump -d xyz.o.

4
hnasarat

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.
  • vous ne pouvez afficher les symboles que s'ils ne sont pas supprimés par les options du compilateur.

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

2
gertvdijk

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.

1
Alex L.