2010-07-08 17 views
5

Tengo una pregunta sobre el código fuente binario en Windows.Mismo código fuente simple, binarios diferentes en Windows

#include <stdio.h> 

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

    return 0; 
} 

El mismo código fuente, I recopilados en dos ocasiones en Windows (VS 2008 Cmmand Prompt: "CL"), pero tiene diferentes binarios.

cl new.cpp 

¿Pueden decirme por qué, y cómo evitar eso?

+1

Ver http://stackoverflow.com/questions/1221185/ idénticos-build-on-different-systems y http://stackoverflow.com/questions/1277877/gcc-compiled-binaries-w-different-sizes - básicamente ningún compilador garantiza que los binarios serán idénticos. –

+1

¿Por qué necesita que los binarios sean idénticos? – jalf

Respuesta

4

La marca de tiempo es parte del formato PE. Siempre obtendrá diferentes valores independientemente de si se compila como versión o no.

+0

¿Cómo puedo evitar eso? ¿Es posible eliminar la marca de tiempo? Porque en Linux, si uso g ++/gcc, los binarios finales son los mismos. –

+2

@Peter: ELF (formato ejecutable de Linux) no tiene un campo de marca de tiempo. ¿Por qué importa si la salida es diferente? –

+0

@Billy: tienes razón en que ELF podría no tener el campo de marca de tiempo. Es muy molesto que el mismo código fuente binarios diferentes. –

1

¿Has compilado como versión? Debug tiene marcas de tiempo integradas que pueden cambiar su exe por compilación

+0

La compilación como se indicó anteriormente arrojó una diferencia de exactamente 1 byte. El LSB de la marca de tiempo incrustada. – mocj

1

Busqué en Google y encontrar una solución a medio camino:

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

http://support.microsoft.com/kb/164151 Cómo comparar imágenes binarias del mismo proyecto se basa

+0

También podría solucionarlo estableciendo la marca de tiempo en el mismo valor en ambos ejecutables. –

Cuestiones relacionadas