Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
846 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Executables différents pour un même code source?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Executables différents pour un même code source?

n°1533608
avander
Posté le 26-03-2007 à 12:31:02  profilanswer
 


Pour prouver qu'un executable X correspond bien au sources Y ont le recompile et on compare le nouvel EXE avec X... règle qui dans la pratique fonctionne bien.  
 
Seulement voilà nous avons un programme utilitaire de compression de fichiers qui lui semble n'en faire qu'à sa tête...  des compilations successives peuvent apparement générer des exécutables différents et là ça devient plus problèmatique quand il faut justifier l'origine de cet exec...  
 
Le compilateur en question est toujours notre fidèle BC++ v3.1  qui tourne sous DOS, le code lui est en C!
 
Y'a-t-il des méchanismes qui peuvent engendrer ce genre de phénomène, s'agit-il peut-être d'un bug du compilateur ou pourquoi pas d'un bug caché dans le source?  
 
Merci pour vos lumières :jap:

mood
Publicité
Posté le 26-03-2007 à 12:31:02  profilanswer
 

n°1533610
MagicBuzz
Posté le 26-03-2007 à 12:34:28  profilanswer
 

regarde si BC++ sait signer le code. si oui, alors les exe devraient avoir la même signature...
 
PS : et compile toujours depuis la même machine, parceque d'une machine à l'autre, en mode "par défaut", le compilo risque d'utiliser des optimisations différentes selon les capacités de l'architecture (genre si tu compile sur un AMD, il y a des chances pour qu'il ajoute les instructions 3DNow dans l'exe, alors que sur un Intel, il mette les SSE)
 
en tout cas, c'est la seule explication logique qui me vient à l'esprit


Message édité par MagicBuzz le 26-03-2007 à 12:35:05
n°1533619
kadreg
profil: Utilisateur
Posté le 26-03-2007 à 12:53:51  profilanswer
 

je sais que perso, on met dans le fichier un identifiant de build, avec la date, l'heure et la machine ayant servi à la compilation, pour tracer les binaires en production

n°1533916
xilebo
noone
Posté le 26-03-2007 à 21:23:38  profilanswer
 

il est possible de générer une signature de type hash-MD5 par exemple sur les exécutables, et de tenir un tableau à jour en indiquant "pour tel signature donnée, on a telle version de programme".

n°1533957
MagicBuzz
Posté le 27-03-2007 à 08:06:53  profilanswer
 

xilebo a écrit :

il est possible de générer une signature de type hash-MD5 par exemple sur les exécutables, et de tenir un tableau à jour en indiquant "pour tel signature donnée, on a telle version de programme".


en fait, d'après la question, il faudrait plutôt signer le source, et inclure cette signature dans l'exe.
car d'après avander, le même source est capable de produire deux exe différents (:heink:)

Message cité 1 fois
Message édité par MagicBuzz le 27-03-2007 à 08:07:08
n°1533959
Tamahome
⭐⭐⭐⭐⭐
Posté le 27-03-2007 à 08:19:27  profilanswer
 

euh, c'est pas le principe du checksum ca ?

n°1534011
avander
Posté le 27-03-2007 à 09:58:23  profilanswer
 

MagicBuzz a écrit :

en fait, d'après la question, il faudrait plutôt signer le source, et inclure cette signature dans l'exe.
car d'après avander, le même source est capable de produire deux exe différents (:heink:)


 
C'est un peu la question en fait: un même source peut-il générer des exe's différent?
 
J'aurais tendance à dire que non alors que je suis confronté au contraire, donc soit y'a un truc qui m'échappe ( probable), soit il y a peut-être une explication plausible ( un compilo pour moi c'est une boite noire) mais que j'ignore...
 
C'est clair que la machine peut influencer mais ce n'est pas le cas ici.
 
 
 

n°1534012
kadreg
profil: Utilisateur
Posté le 27-03-2007 à 09:59:03  profilanswer
 

avander a écrit :

C'est un peu la question en fait: un même source peut-il générer des exe's différent?


 
j'ai déjà répondu oui ....

n°1534014
lorill
Posté le 27-03-2007 à 09:59:27  profilanswer
 

avander a écrit :

C'est un peu la question en fait: un même source peut-il générer des exe's différent?


oui. Selon les options du compilateurs, les options de compilation, etc...

n°1534017
MagicBuzz
Posté le 27-03-2007 à 10:01:37  profilanswer
 

c clair que déjà, selon les options du compilo, il va pas faire du tout le même code.

mood
Publicité
Posté le 27-03-2007 à 10:01:37  profilanswer
 

n°1534041
avander
Posté le 27-03-2007 à 10:19:45  profilanswer
 


Est-ce que vous croyez vraiment que je vais m'amuser à changer de machine, voir aller changer les options d'optimisation dans mon project-file alors que l'objectif est justement d'obtenir un executable identique?
 
NON et pourtant on observe des différences ( parfois qu'une dizaine de bytes certes), si c'est normal j'aimerais comprendre et alors il va falloir trouver une autre technique pour dire tel code source correspond à tel executable...
 
On est toujours parti du principe que l'executable était en quelque sorte un 'gros' hash du code fourni en entrée. On change un ligne et paf on a un nouvel hashcode, ce qu'on observe ici c'est que le hashcode change sans modif apparente du code source.  :whistle:  
 
Apparement vous semblez me dire que la compil ne peut pas être considéré comme un hash?  

n°1534083
MagicBuzz
Posté le 27-03-2007 à 10:44:22  profilanswer
 

oui.
 
le moyen le plus propre, c'est de faire une macro de compilation, qui vai faire un MD5 de tout le code, avant de l'injecter dans une constante du code, afin qu'il soit contenu dans l'EXE.
 
ou plus simplement utiliser la numérotation de version du compilo s'il le permet.

n°1534528
matafan
Posté le 27-03-2007 à 18:15:46  profilanswer
 

Si ton source fait des trucs du genre :

static char build_date[] = __DATE__ __TIME__;


Alors forcément deux compils du même code vont donner deux binaires différents.

n°1535456
avander
Posté le 28-03-2007 à 21:07:36  profilanswer
 

Certes, mais ce n'est pas le cas...

n°1538342
docmaboul
Posté le 04-04-2007 à 12:22:05  profilanswer
 

avander a écrit :

Y'a-t-il des méchanismes qui peuvent engendrer ce genre de phénomène, s'agit-il peut-être d'un bug du compilateur ou pourquoi pas d'un bug caché dans le source?


 
Oui, par exemple si le compilateur fait des optimisations en fonction de son temps d'exécution (il optimise durant 10 secondes max par exemple). Du coup, en fonction de la charge de la machine, le résultat peut varier de manière plus ou moins significative :D

n°1538405
avander
Posté le 04-04-2007 à 14:18:07  profilanswer
 

Merci, j'ignorais... mais je doute que ce genre de technologie de pointe était déjà d'usage sous MS-DOS... :-).

n°1538485
0x90
Posté le 04-04-2007 à 16:27:48  profilanswer
 

Utilisation d'une hashtable dans le compilo pour référencer "kkchose" qui s'initialise +/- aléatoirement ptêtre...
 
On  trouve par exemple ça dans la doc de gcc :


       -frandom-seed=string
           This option provides a seed that GCC uses when it would otherwise
           use random numbers.  It is used to generate certain symbol names
           that have to be different in every compiled file.  It is also used
           to place unique stamps in coverage data files and the object files
           that produce them.  You can use the -frandom-seed option to produce
           reproducibly identical object files.
 
           The string should be different for every file you compile.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1539177
Sve@r
Posté le 05-04-2007 à 19:03:02  profilanswer
 

MagicBuzz a écrit :

oui.
 
le moyen le plus propre, c'est de faire une macro de compilation, qui vai faire un MD5 de tout le code, avant de l'injecter dans une constante du code, afin qu'il soit contenu dans l'EXE.


Euh... si t'injectes le résultat du MD5 du code dans le code, le code change donc le MD5 change aussi donc faut réinjecter le nouveau MD5 dans le code mais le code change de nouveau donc le MD5 change donc... :pt1cable:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1539197
Tamahome
⭐⭐⭐⭐⭐
Posté le 05-04-2007 à 19:41:08  profilanswer
 

et vice et versa


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1539205
Chronoklaz​m
Posté le 05-04-2007 à 19:50:19  profilanswer
 

Si il est possible de modifier à la main un executable juste apres la compilation, du genre en fin de ce fichier executable mettre un identifiant la date, si oui alors je vois pas le souci.

n°1539242
matafan
Posté le 05-04-2007 à 21:02:04  profilanswer
 

Pas besoin de modifier à la main, tu fais comme dans mon exemple.

n°1539386
MagicBuzz
Posté le 06-04-2007 à 09:49:30  profilanswer
 

Sve@r a écrit :

Euh... si t'injectes le résultat du MD5 du code dans le code, le code change donc le MD5 change aussi donc faut réinjecter le nouveau MD5 dans le code mais le code change de nouveau donc le MD5 change donc... :pt1cable:


suffit de faire un fichier dédié qui contient le code MD5 ;)
en fait, j'imagine un fichier include qui contient en constante le code MD5.
=> à la compilation, le code est donc recopié dans l'exe.
=> lors du calcul du MD5, on ne prends pas ce fichier.
 
ça me semble aisé à faire, avec un simple makefile

n°1539968
Sve@r
Posté le 07-04-2007 à 15:26:05  profilanswer
 

MagicBuzz a écrit :

suffit de faire un fichier dédié qui contient le code MD5 ;)
en fait, j'imagine un fichier include qui contient en constante le code MD5.
=> à la compilation, le code est donc recopié dans l'exe.
=> lors du calcul du MD5, on ne prends pas ce fichier.
 
ça me semble aisé à faire, avec un simple makefile


+1
 
mais faut que cette constante MD5 soit mise sous forme de string ce qui permettra ensuite de l'extraire plus facilement (avec des outils comme "string" sous unix ou autres)...


Message édité par Sve@r le 07-04-2007 à 15:31:55

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1539969
0x90
Posté le 07-04-2007 à 15:29:51  profilanswer
 

Un poil lourdingue le calcul du md5 de l'ensemble des fichiers source quand même :/


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Executables différents pour un même code source?

 

Sujets relatifs
Comment avoir 1000 chansons gratis avec 60 lignes de code?Google summer of code 2007
recuperer code html depuis le webCommunication dll C++ -> code C# (bis) [RESOLU]
ergonomie ecran et code javaParser un code source generé par JavaScript avec DOM
executer du code php qui se trouve dans mysqlun probleme dans mon code ?
Code Blocks & Vista... 
Plus de sujets relatifs à : [C] Executables différents pour un même code source?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR