2010-07-08 3 views
5

J'ai une question sur le binaire source sur Windows.Même code source simple, différents binaires sous Windows

#include <stdio.h> 

int main() 
{ 
    printf("Hello, world!\n"); 

    return 0; 
} 

Le même code source, je compilé deux fois sur Windows (VS 2008 Cmmand Invite: "CL"), mais je me suis différents binaires. Pouvez-vous me dire pourquoi et comment éviter cela?

+1

Voir http://stackoverflow.com/questions/1221185/ identique-build-on-different-systems et http://stackoverflow.com/questions/1277877/gcc-compiled-binaries-w-different-sizes - en principe, aucun compilateur ne garantit que les binaires seront identiques. –

+1

Pourquoi avez-vous besoin que les binaires soient identiques? – jalf

Répondre

4

L'horodatage fait partie du format PE. Vous obtiendrez toujours des valeurs différentes, que vous compiliez ou non en tant que version.

+0

Comment puis-je éviter cela? Est-il possible de supprimer l'horodatage? Parce que sous Linux, si j'utilise g ++/gcc, les binaires finaux sont les mêmes. –

+2

@Peter: ELF (format exécutable de Linux) n'a pas de champ d'horodatage. Pourquoi est-ce important si la sortie est différente? –

+0

@Billy: Vous avez raison: ELF n'a peut-être pas le champ d'horodatage. C'est juste très ennuyeux ce même code source des binaires différents. –

1

Avez-vous compilé en tant que version? Le débogage comporte des horodatages qui peuvent modifier votre exe par compilation.

+0

La compilation comme indiqué ci-dessus a donné une différence d'exactement 1 octet. Le LSB de l'horodatage incorporé. – mocj

1

I googlé et trouvé une solution à mi-chemin:

DUMPBIN /RAWDATA MyApp.EXE > first.txt 
DUMPBIN /RAWDATA MyApp.EXE > second.txt 

http://support.microsoft.com/kb/164151 Comment comparer des images binaires du même projet builds

+0

Vous pouvez également contourner ce problème en définissant l'horodatage à la même valeur dans les deux exécutables. –

Questions connexes