GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir les options du compilateur à partir d'un exécutable compilé ?

gcc a un -frecord-gcc-switches option pour cela :

   -frecord-gcc-switches
       This switch causes the command line that was used to invoke the compiler to
       be recorded into the object file that is being created.  This switch is only
       implemented on some targets and the exact format of the recording is target
       and binary file format dependent, but it usually takes the form of a section
       containing ASCII text.

Ensuite, les exécutables ELF contiendront .GCC.command.line section avec ces informations.

$ gcc -O2 -frecord-gcc-switches a.c
$ readelf -p .GCC.command.line a.out 

String dump of section '.GCC.command.line':
  [     0]  a.c
  [     4]  -mtune=generic
  [    13]  -march=x86-64
  [    21]  -O2
  [    25]  -frecord-gcc-switches

Bien sûr, cela ne fonctionnera pas pour les exécutables compilés sans cette option.

Pour le cas simple des optimisations, vous pourriez essayez d'utiliser un débogueur si le fichier a été compilé avec des informations de débogage. Si vous le parcourez un peu, vous remarquerez peut-être que certaines variables ont été "optimisées". Cela suggère qu'une optimisation a eu lieu.


Une autre option est -grecord-gcc-swtiches (notez, pas -f mais -g). Selon la documentation de gcc, il mettra des drapeaux dans les informations de débogage nain. Et semble être activé par défaut depuis gcc 4.8.

J'ai trouvé que le programme dwarfdump était utile pour extraire ces cflags. Notez que le programme strings ne les voit pas. On dirait que les informations sur les nains sont compressées.


Si vous compilez avec le -frecord-gcc-switches flag, les options du compilateur de ligne de commande seront écrites en binaire dans la section note. Voir aussi les docs.


Linux
  1. Linux – Pouvons-nous obtenir des informations sur le compilateur à partir d'un binaire Elf ?

  2. Linux :comment obtenir tous les journaux de connexion du système ?

  3. Comment désassembler un exécutable binaire sous Linux pour obtenir le code assembleur ?

  4. Utilisation d'openssl pour obtenir le certificat d'un serveur

  5. Obtenez les 4 derniers caractères de la sortie de la sortie standard

Comment obtenir le nom de fichier à partir du chemin complet sous Linux

Comment obtenir les meilleures performances du serveur Nginx

Comment puis-je obtenir la longueur d'un fichier vidéo à partir de la console ?

Comment obtenir l'URL du fichier Dropbox à partir de la ligne de commande ?

Comment puis-je obtenir mon adresse IP à partir de la ligne de commande ?

Existe-t-il un moyen d'obtenir la version du BIOS depuis Linux ?