IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Code identique, exe différent


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Par défaut Code identique, exe différent
    Bonjour,
    J'ai un code très simple que je compile et link, qui donne donc un premier exe en résultat (en mode release). 2 minutes plus tard, je recompile exactement le même code, ce qui donne un autre exe.
    Les 2 exe fonctionnent évidemment de façon identique, leur taille est identique aussi, mais en comparant les 2 fichiers exe on voit qu'il y a quelques octets différents par ci par là (4 différences en tout). Je voudrais bien savoir comment éviter cela. A priori ce n'est pas gênant car le comportement est toujours le même, mais comme je cherche à faire un checksum sur l'exe, le fait qu'il y ait des différences à chaque compilation me dérange fortement.

    Savez-vous comment l'éviter?

    Pour info, j'ai fait le test avec un petit projet Win32 Console qui affiche juste "Hello World". J'ai laissé les options par défaut qui font que je link avec uuid.lib. Pensant que ça venait de là, j'ai ignoré uuid.lib dans les options de link, mais le problème subsiste...

    Toute aide est la bienvenue

    Merci,
    Eric

  2. #2
    Membre chevronné
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 236
    Par défaut
    Bonjour,
    Utilises tu un IDE pour faire ton exe? Parfois les IDE peuvent rajouter des en tête. Cela pourrait expliquer les différences.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Par défaut
    Citation Envoyé par Malinaka Voir le message
    Bonjour,
    Utilises tu un IDE pour faire ton exe? Parfois les IDE peuvent rajouter des en tête. Cela pourrait expliquer les différences.
    Ah oui, j'ai oublié de préciser ça: j'ai fait le test avec Visual Studio 2003 et 2008. Dans les 2 cas, quasiment le même résultat.
    Et effectivement c'est Visual Studio qui me met par défaut la lib uuid.lib à l'édition de liens.

    Eric

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    Cela n'a rien à voir avec l'IDE, qui n'est qu'un éditeur amélioré.

    La différence entre les exécutables est très probablement le timestamp de génération que le linker initialise pour avoir une traçabilité correcte des éléments compilés.

    Ce n'est pas parce que le code source n'a pas changé que le résultat est identique. La configuration du projet, de l'environnement de compilation sont au moins aussi important que le code source.

    Normalement, si aucune modification n'est faite dans les sources et dans la configuration des projets, VS ne recompile pas l'exécutable.

    Il régénère l'exécutable s'il y a des modifications ou si vous lui forcez la main.
    Et à chaque régénération, le linker met un nouveau timestamp.

    Cela est extrêmement pratique quand vous utilisez un serveur de symbole et un serveur de code source hébergé dans un gestionnaire de configuration logiciel comme TFS ou ClearCase.

    En résumé, si vous travaillez de manière professionnelle, c'est une obligation.

    Donc chercher à éviter cette fonctionnalité serait s'interdire d'utiliser tous les outils modernes de traçabilité des codes sources.

    Pourquoi le processus de calcul du checksum ne fait-il pas parti intégrante du processus de génération de l'exécutable ?

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Cela n'a rien à voir avec l'IDE, qui n'est qu'un éditeur amélioré.

    La différence entre les exécutables est très probablement le timestamp de génération que le linker initialise pour avoir une traçabilité correcte des éléments compilés.

    Ce n'est pas parce que le code source n'a pas changé que le résultat est identique. La configuration du projet, de l'environnement de compilation sont au moins aussi important que le code source.

    Normalement, si aucune modification n'est faite dans les sources et dans la configuration des projets, VS ne recompile pas l'exécutable.

    Il régénère l'exécutable s'il y a des modifications ou si vous lui forcez la main.
    Et à chaque régénération, le linker met un nouveau timestamp.

    Cela est extrêmement pratique quand vous utilisez un serveur de symbole et un serveur de code source hébergé dans un gestionnaire de configuration logiciel comme TFS ou ClearCase.

    En résumé, si vous travaillez de manière professionnelle, c'est une obligation.

    Donc chercher à éviter cette fonctionnalité serait s'interdire d'utiliser tous les outils modernes de traçabilité des codes sources.

    Pourquoi le processus de calcul du checksum ne fait-il pas parti intégrante du processus de génération de l'exécutable ?
    Oui, en effet VS ne régénère l’exécutable que parce que je lui force la main. Et je fais cela sans rien changer ni au code, ni aux options de compilation/link. Donc la logique voudrait que l’exécutable soit le même la 2ème fois, au détail près du time stamp dont vous parlez.
    Je ne dit pas que cette fonction n'est pas utile, mais dans le cas qui nous occupe, je voudrais la débrayer pour résoudre mon problème bien spécifique à ce projet seulement. Est-ce possible?
    En fait, mon projet cible est une DLL qui s'auto-vérifie au moment où elle est chargée pour s'assurer que son code et ses ressources n'ont pas été modifiées. C'est une protection anti-piratage pour éviter que les hackers ne modifient le code de vérification de ma clé. Je sais que ce n'est pas infaillible, mais c'est toujours ça... DOnc s'il y a possibilité de débrayer le time stamp, ou s'il existe un autre moyen d'auto-vérifier la DLL, je suis preneur

    Eric

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    Pourquoi ne pas exclure le Timestamp de la vérification ?

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par bacelar Voir le message
    La différence entre les exécutables est très probablement le timestamp de génération que le linker initialise pour avoir une traçabilité correcte des éléments compilés.
    il y a fort à parier que cela ça l'explication oui

Discussions similaires

  1. [HTML 4.0] 2 fichiers html avec codes identiques mais affichages différents !?
    Par lololebricoleur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 26
    Dernier message: 23/11/2013, 15h19
  2. Code identique, résultats différents
    Par chalme dans le forum Langage
    Réponses: 2
    Dernier message: 13/06/2012, 09h56
  3. Réponses: 5
    Dernier message: 06/04/2008, 20h08
  4. Code SQL généré différent d'attendu
    Par MxPx_23 dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/09/2006, 10h26
  5. [Conception] Deux codes identique mais un qui fonctionne pas
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/08/2006, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo