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

C++ Discussion :

[compilation] Obtenir deux binaires identiques avec les mêmes sources


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Par défaut [compilation] Obtenir deux binaires identiques avec les mêmes sources
    Bonjour,

    je compile deux fois les mêmes sources avec GCC, je calcul un CRC sur les binaires obtenus et je trouve deux clés différentes.

    Je me suis dit que c'était du à un changement de date/heure.

    Est-ce la bonne explication? Sinon quelle est l'explication?

    Comment obtenir deux fois le même binaire en compilant les mêmes sources?

    Précisions:
    - il n'y a pas de tag style CVS "$date"
    - je n'utilise pas d'IDE, mais la commande: "gcc hello.cpp -o hello"

  2. #2
    screetch
    Invité(e)
    Par défaut
    dans le format ELF il y a le timestamp. a chaque fois que tu recompiles tu vas avoir un exe légèrement différent. Essaye de faire un diff binaire (je ne connais pas de programme pour ca mais ca existe)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Par défaut
    Citation Envoyé par screetch Voir le message
    dans le format ELF il y a le timestamp. a chaque fois que tu recompiles tu vas avoir un exe légèrement différent. Essaye de faire un diff binaire (je ne connais pas de programme pour ca mais ca existe)
    J'ai le même problème sous Windows.

    Le problème est que je dois être capable de générer toujours le même binaire à partir de sources versionées correspondant à une version de configuration donnée. Cela fait partie des exigences qualité de mon entreprise.

    PS1: je n'ai pas le choix sur l'algorithme de CRC qui est un RIPEMD 160 base 32.

    PS2: on s'assure aussi de l'integrité des sources avec un CRC. Et la chaine d'outil de developpement est sous gestion de conf...

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Quand on boostrap gcc, il fait une comparaison de binaires a la fin. Tu peux éventuellement récupérer sa méthode.

  5. #5
    screetch
    Invité(e)
    Par défaut
    en fait j'ai vérifié mon "parser d'executable", il est portable windows (Portable Executable) et Linux (Elf), et je me suis trompé. sous linux, il n'y a pas de timestamp sur le fichier binaire (peut etre les infos de débug? mais je ne crois pas). c'est sous windows qu'il y a un timestamp.

    malheureusement pas possible de vérifier ce timestamp, tu risques de devoir faire un peu a la paluche
    ce que e pense etre le plsu simple (et le plus portable) :
    objdump -s "exe" te donne le contenu des sections (exit le header et tout ca), vérifie que les deux contenus sont identiques... au header près.

  6. #6
    screetch
    Invité(e)
    Par défaut
    je vais me repeter mais je pense que la solution que j'ai proposé fonctionne
    Citation Envoyé par screetch Voir le message
    ce que e pense etre le plsu simple (et le plus portable) :
    objdump -s "exe" te donne le contenu des sections (exit le header et tout ca), vérifie que les deux contenus sont identiques... au header près.

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par KeeeN Voir le message
    Le problème est que je dois être capable de générer toujours le même binaire à partir de sources versionées correspondant à une version de configuration donnée. Cela fait partie des exigences qualité de mon entreprise.
    Faut aussi qu'ils arrêtent de demander des choses quasi-impossibles, ou alors filer les billes nécessaires (= le temps et l'argent) pour avoir la politique de leurs moyens...

    La seule solution dont j'ai entendu parler, mais jamais vue appliquer, est un rétropatch sur l'exécutable produit en y injectant de force le timestamp du fichier d'origine (le fichier projet principal, par exemple, ou un fichier dédié à ça dont le seul intérêt est de stocker une date/heure). Pas trivial de prime abord, donc...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    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 503
    Par défaut
    Surtout qu'il y a des outils qui se servent de ce timestamp adossé à un gestionnaire de code source et l'intégration continue pour fournir le code source correspondant à la version de l'exécutable qui posent problème.
    Encore une solution de l'ingénierie qualité complètement obsolète.
    http://msdn.microsoft.com/en-us/magazine/cc163563.aspx

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Par défaut
    Si je comprend bien, nous n'avons pas de solution avec GCC pour avoir un binaire sans time stamp. Je ne vais pas changer les suite d'outils utilisée car je ne fais que récupérer un projet existant.

    Donc la seule solution que j'ai pour coller avec l'exigence qualité est de modifier cette exigence.

    Est-ce bien ça?

    J'ai encore un mois pour trouver une solution, après je modifie l'application de l'exigence ou l'exigence, pour ce projet.

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/10/2012, 12h34
  2. Réponses: 5
    Dernier message: 04/04/2010, 00h14
  3. Repérer deux fichiers identiques mais pas avec les mêmes dates
    Par rambc dans le forum Général Python
    Réponses: 14
    Dernier message: 17/03/2009, 03h13
  4. [2.0] Deux requêtes avec les mêmes paramètres
    Par alband85 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 07/07/2008, 19h28
  5. Copier contenu TB_A dans TB_B avec les même champs
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2005, 16h22

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