5

¿Hay alguna manera de forzar el mismo código para producir el mismo binario en Visual C++? ¿Apagar la marca de tiempo en el PE o forzar la marca de tiempo en el PE para que sea un valor fijo, en otras palabras?Reproducibilidad binaria en Visual C++

Respuesta

3

Supongo que podría escribir una utilidad para abrir el PE, establecer la suma de comprobación en 0, configurar la marca de tiempo a su gusto, volver a calcular el crc y luego volver a escribirlo. Sin embargo, sería bueno si hubiera una manera oficial de garantizar una reproducibilidad binaria perfecta.

Para más información: http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

3

No es sólo una marca de tiempo - hay un GUID incrustado utilizado para el AP juego - como John Robbins explains.

Incluso más allá de eso, simplemente no hay manera de forzar al compilador para generar resultados consistentes, como Jim Griesmer explains -

autores de compiladores están mucho más interesados ​​en generar correctamente el funcionamiento de código y generar rápidamente que asegurar que todo lo que se genera se presenta de forma idéntica en su disco duro. Debido a los numerosos y variados métodos e implementaciones para optimizar el código, siempre es posible que una compilación termine con un poco más de tiempo para hacer algo extra o diferente de lo que hizo otra compilación. Por lo tanto, el resultado final podría ser un conjunto diferente de bits para lo que es la misma funcionalidad.

Por lo tanto, la función y el orden sección son no garantiza que sea ordenado constantemente en el PE resultante. Un ejemplo es en el enlace.