5

Para fines de verificación de código binario/fuente, me gustaría poder hacer dos compilaciones en la misma computadora con 2 semanas de diferencia y hacer que los binarios sean idénticos y así pasar una prueba de suma de comprobación.Compilando dos veces con Delphi 6 y obteniendo la misma suma de comprobación en el binario

Hasta ahora he encontrado que lo más probable es que el compilador escriba la marca de tiempo en el binario. Puedo solucionar esto haciendo la comparación en los resultados dumpbin/rawdata por este artículo msdn.

http://support.microsoft.com/kb/164151

Sin embargo los resultados dumpbin todavía difieren en un alrededor de una docena lugares y la diferencia todavía parece ser algún tipo de marca de tiempo (cambio de A1 73 a C4 76) por ejemplo.

Supongo que esta es la marca de tiempo que el compilador delphi está poniendo en las secciones de código/datos, pero no puedo encontrar dónde está sucediendo esto o cómo desactivarlo. Jugar con las diversas opciones de compilador/enlazador no ha cambiado este comportamiento.

Cualquier ayuda sería muy apreciada.

+0

Solo soy curioso (sin ánimo de ofender): ¿Cuál es el escenario en el que desea verificar que la suma de comprobación exe no haya cambiado entre 2 compilaciones? –

+0

Lo conseguiría cada uno ".obj "(o equivalente en Delphi) tiene una marca de tiempo que encuentra su camino en su .exe – jmucchiello

+0

tiene que ver con una transferencia de código donde la contraparte necesita probar el binario y posteriormente verificar que el código se corresponde con él. No he podido pensar en otro esquema por el cual hacer esto hasta el momento. –

Respuesta

1

Investigamos esta pregunta hace unos años, y por lo que recuerdo la respuesta fue simplemente que la gente de Borland/CodeGear/Embarcadero no se suscriben a la idea de que el compilador debe producir exactamente el mismo resultado dado exactamente la misma entrada (dado que la fecha-hora actual no es aceptable considerar como entrada).

Esto es decepcionante, pero dado que Delphi ya tiene versiones anteriores, probablemente no cambie.

0

Lamentablemente no he escuchado ninguna respuesta a este problema.

No se trata solo de marcas de tiempo, sino que hay lugares donde unos pocos bytes de basura aleatoria sin memoria terminan en el resultado.

1

Basado en su comentario en la pregunta, creo que está en busca de la respuesta a esta pregunta: ¿

¿Cómo puedo comprobar que un determinado binario es creado por un cierto conjunto de archivos de origen

una manera es tener un proceso integrado automatizado que:

  1. inserta una etiqueta verififcation único en el código fuente (podría ser tan simple como una cadena GUID o algo más en un archivo de inclusión)
  2. compila los binarios utilizando esa etiqueta de verificación
  3. Packs el código fuente y binario que resulta en un árbol de directorios de entrega

Debe asegurarse de que su código fuente utiliza en realidad esa etiqueta de verificación (por ejemplo, mostrando en un cuadro sobre, o algo similar).

Uso FinalBuilder para automatizar procesos de compilación como este.

--jeroen

Cuestiones relacionadas