Pregunta

¿Hay alguna manera de forzar que el mismo código produzca el mismo binario en Visual C++?¿Desactivar la marca de tiempo en el PE o forzar que la marca de tiempo en el PE tenga un valor fijo, en otras palabras?

¿Fue útil?

Solución 2

supongo que se podría escribir una utilidad para abrir el PE, establezca la suma de comprobación a 0, establezca la marca de tiempo a lo que te gusta, volver a calcular el CRC, a continuación, escribir de nuevo hacia fuera. Sería bueno si hubiera una manera oficial para asegurar la reproducibilidad binario perfecto, sin embargo.

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

Otros consejos

No es sólo una marca de tiempo: hay un GUID incorporado que se utiliza para la coincidencia de PDB, como dice John Robbins. explica.

Incluso más allá de eso, simplemente no hay manera de forzar al compilador a generar resultados consistentes, como dice Jim Griesmer. explica -

Los escritores de compiladores están mucho más interesados ​​en generar código que funcione correctamente y generarlo rápidamente que en asegurarse de que todo lo que se genera esté distribuido de manera 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 adicional o diferente que otra compilación.Por lo tanto, el resultado final podría ser un conjunto diferente de bits para la misma funcionalidad.

Por lo tanto, la función y el orden de las secciones son no Se garantiza que estará ordenado de manera consistente en el PE resultante.Un ejemplo está en el enlace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top