2015-09-22 3 views
1

Je voulais savoir si vous connaissiez une commande ou un moyen d'écrire comme commentaire ou chaîne à l'intérieur du fichier exécutable. En effet, je l'ai déjà fait cela, avec compilateur XLC je l'ai fait avec le mais maintenant #pragma comment(user, "string") je dois changer pour GCC mais il y a un problème, sous GCC cette #pragma n'est pas reconnu.Comment écrire les informations nécessaires dans un fichier exécutable

Ma question est, savez-vous un autre #pragma qui peut le faire sous gcc, ou juste une autre façon de traiter pour récupérer une information écrite dans le fichier exécutable lorsque je compile.

Merci, Ézéchiel

Répondre

0

Voici un littérales solution.String rapide dans un c/C++ programme, sont généralement mis dans le segment en lecture seule du fichier ELF.

En supposant que votre commentaire suit un schéma:

My_Comment: .... 

vous pouvez ajouter quelques définitions de chaîne dans votre programme:

#include <stdio.h> 

void main() { 

    char* a = "My Comment: ..."; 
} 

compilation:

$ gcc test.c 

puis recherchez votre modèle de commentaire dans l'exécutable:

$ strings a.out | grep Comment 
My Comment: ... 

Puis-je demander quel est le cas d'utilisation des commentaires d'intégration dans un exécutable?

Suivi:

Si vous compilez avec le drapeau de -O3, cette chaîne inutilisée est optimisé, de sorte qu'il ne soit pas stocké du tout dans les données ro. Sur la base de la même idée, vous pouvez tromper gcc par:

#include <stdio.h> 

void main() { 

    FILE* comment = fopen("/dev/null", "w"); 
    fprintf(comment, "My Comment:"); 
} 

Ensuite, recherchez votre commentaire. Vous obtenez bien sûr les frais généraux de 2 ou 3 appels système, mais j'espère que vous pourrez vivre avec.

Faites-moi savoir si cela fonctionne!

+0

Bien sûr, vous Je peux demander, je veux le faire parce que je dois récupérer la version de chaque fichier source contenue dans l'exécutable pour faciliter le débogage lorsqu'il existe différentes versions. Et j'ai essayé votre chemin, ça ne marche pas :( –

+0

Êtes-vous sûr que vous n'avez pas fait de faute de frappe dans la commande grep? Pouvez-vous coller la sortie de la commande strings? Quel est le système d'exploitation avec lequel vous travaillez? Je suppose? – sestus

+0

Je travaille sur AIX, le problème avec votre méthode est que c'est trop compliqué pour les mecs non-expérimentés en C de l'appliquer dans chaque fichier source en effet ma solution était plus simple que de mettre un commentaire dans chaque fichier, mais si pour modifier une fonction à l'intérieur du code, (qui doit être appelé et déclaré, etc), vous pouvez voir que mon option était plus facile, c'est pourquoi j'ai demandé si l'équivalent dans gcc existait –

0

Une autre façon de mettre des informations spécifiques dans le fichier exécutable en utilisant le xlC_r famille de compilateur sous AIX, est

#pragma comment(copyright, "whatever") 

Si vous voulez une chaîne de style ce, je vous recommande:

// the Q(S) macro uses ANSI token pasting to get the _value_ 
// of the macro argument as a string. 
#define Q(S) Q_(S) 
#define Q_(S) #S 
// breaking up the "@(" and "#)" prevent `what` from finding this source file. 
#define WHAT(MODULE,VERSION) "@(" "#) " Q(VERSION) " " Q(MODULE) " " __DATE__ " " __TIME__ 
#pragma comment(copyright, WHAT(ThisProgram,1.2.3.4)) 

Ou quelle que soit la chaîne spéciale que vous intégrez.

MISE À JOUR: pour gcc

Voir la réponse par user2079303 à: gcc equivalent of #pragma comment

Pour utiliser assembleur en ligne pour ajouter une chaîne à la .commentaire section

__asm__(".section .comment\n\t" 
     ".string \"Hello World\"\n\t" 
     ".section .text"); 

MISE À JOUR: pour AIX gcc

Il semble que ce travail mieux sur assembleur en ligne gcc AIX pour ajouter une chaîne à la .comment section

__asm__(".csect .comment[RO]\n\t" 
     ".string \"Hello World\"\n\t" 
     ".csect .text[PR]");