Comment peut-on faire la différence entre deux exécutables issus d'un meme code source mais compilés par des outils différents?
Comment peut-on faire la différence entre deux exécutables issus d'un meme code source mais compilés par des outils différents?
Savoir quel compilateur a produit quel exécutable?
Salut,
Tu es bien avare sur les détails, mais bon... Supposons que tu écrives un programme console. Tu peux afficher des #define spécifiques au compilateur, au démarrage ou par une option de la ligne de commande (-v ou --version par exemple). Par exemple:
__DATE__ et __TIME__ étant des #defines générés par tous les compilos, sauf erreur. Mais pour avoir explicitement le nom du compilateur, je ne vois pas d'autre solution que de créer un define en dur par l'IDE de ton compilateur. Peut-être que quelqu'un d'autre est plus familier avec ce genre d'info?
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf("Release version - Comp. %s %s", __DATE__ ,__TIME__);
A+
Pfeuh
Pour plus d'infos, j'ai deux exécutables et je veux savoir s'ils ont été compilés avec deux compilateurs différents (y compris les éditeurs de liens).
Merci pour vos avis
A mon avis il doit y avoir une entête. C'est à dire qu'une lecture en hexa du début des deux exe pourrait peut-être vous donner des informations. Peut-âtre pas directement les auteurs des compilateurs-linkeurs, mais au moins des informations comparables et qui permettraient d'affiner votre recherche.
De toute façon, je suis persuadé que l'organisation des .exe est très basique (trivial fait beaucoup mieux), et que, sauf le fait que c'est du binaire, ça doit être très simple.
N'oubliez pas qu'un .exe contient des informations en texte du genre nom de fonction.
Bonjour,
je ne sais pas si l'information est toujours recherchee mais dans le doute.
Les compilateurs peuvent (ce n'est pas une obligation meme si beaucoup le fond) ajouter une signature dans le code genere.
des outils ont rassemblee des donnees et ont realise une base pour permettre la detection du compilateur utilise. (ce n'est pas fiable a 100% il est toujours possible de modifier cette signature sois meme.
Voici un exemple tout simple.
Si je regarde le listing assembleur d'une source quelconque compilee avec gcc je trouve:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3" .section .note.GNU-stack,"",@progbits
Et si je fais un hexdump -C sur le binaire genere je retrouve:
Voila, j'espere que ca a repondu a la question de base et que ca servira a quelqu'un un jour
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 00001010 00 00 00 00 00 00 00 00 47 43 43 3a 20 28 55 62 |........GCC: (Ub| 00001020 75 6e 74 75 20 34 2e 34 2e 33 2d 34 75 62 75 6e |untu 4.4.3-4ubun| 00001030 74 75 35 29 20 34 2e 34 2e 33 00 00 2e 73 79 6d |tu5) 4.4.3...sym|
“La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager