5

Pour les besoins de la vérification de code binaire/source, j'aimerais pouvoir faire deux compilations sur le même ordinateur à 2 semaines d'intervalle et avoir les binaires identiques et ainsi passer un test de somme de contrôle. Jusqu'à présent, j'ai trouvé que l'horodatage sera probablement écrit par le compilateur dans le binaire. Je peux contourner cela en faisant la comparaison sur les résultats dumpbin/rawdata par cet article msdn.Compiler deux fois avec Delphi 6 et obtenir la même somme de contrôle sur le binaire

http://support.microsoft.com/kb/164151

Cependant, les résultats diffèrent de dumpbin encore en une douzaine de lieux et la différence semble être encore une sorte d'horodatage (passant de A1 à 73 C4 76) par exemple. Je suppose que c'est l'horodatage que le compilateur Delphi met dans les sections de code/données mais je ne peux pas trouver où cela se produit ou comment l'éteindre. Le bidouillage avec les diverses options du compilateur/éditeur de liens n'a pas changé ce comportement.

Toute aide serait grandement appréciée.

+0

Je ne suis que curios (sans vouloir offenser): Quel est le scénario que vous voulez vérifier que la somme de contrôle exe n'a pas changé entre 2 builds? –

+0

Je voudrais obtenir chacun ".obj "(ou équivalent en Delphi) a un horodatage qui trouve son chemin dans votre fichier .exe – jmucchiello

+0

a à voir avec un transfert de code où la contrepartie doit tester le binaire et ensuite vérifier que le code lui correspond. Je n'ai pas réussi à imaginer un autre plan pour faire cela jusqu'à présent. –

Répondre

1

Nous avons étudié cette question il y a quelques années, et je me souviens bien, la réponse est tout simplement que les gens de Borland/CodeGear/Embarcadero ne souscrivons pas à l'idée que le compilateur doit produire exactement le même sortie ayant exactement la même entrée (étant donné que la date-heure actuelle n'est pas acceptable à considérer comme entrée).

Ceci est décevant, mais étant donné que Delphi a plus de 14 versions majeures, il ne changera probablement pas.

0

Malheureusement, je n'ai pas entendu parler de réponse à ce problème.

Ce n'est pas seulement l'horodatage, mais il y a des endroits où un peu d'octets de mémoire non stockée dans la mémoire se retrouve dans le résultat.

1

Sur la base de votre commentaire dans la question, je pense que vous êtes à la recherche de la réponse à cette question:

Comment puis-je vérifier qu'un certain binaire est créé par un certain ensemble de fichiers sources

une façon est d'avoir un processus automatisé qui construit:

  1. insère une balise de verififcation unique dans le code source (peut être aussi simple que d'une chaîne de GUID ou quelque chose d'autre dans un fichier inclus)
  2. Compile les binaires à l'aide de cette balise de vérification
  3. Packs le code source et binaire résultant dans une arborescence de livraison

Vous devez vous assurer que votre code source utilise en fait cette étiquette de vérification (par exemple en montrant dans une boîte à propos, ou quelque chose de similaire).

J'utilise FinalBuilder pour automatiser des processus de construction comme celui-ci.

--jeroen

Questions connexes