Como conseguir el mismo fichero de compilación byte a byte.

24/08/2007 - 12:36 por Elric | Informe spam
Hola,
Mi empresa pasa homologaciones del software que realizamos, de tal manera
que el software que acabamos instalando tiene que ser identico byte a byte
con el que los homologadores generan a partir de nuestro codigo fuente
original.

Estoy haciendo pruebas en csharp tanto de ejecutables como de librerias dll
y a cada compilacion hay varias secciones que cambian. Esto hace impossible
la generación de un checksum del software que sea el mismo de compilación en
compilación (en caso que no haya cambios de codigo, claro ;)).

Me he fijado y parece que algunos cambios viene dados por el GUID, por la
versión autoincremental y por la fecha. Pero hay otros que no entiendo a que
se refieren.

En resumen: Hay alguna manera "official" de conseguir que los ficheros de
salida sean identicos de compilación en compilación?.

muchas gracias.

Preguntas similare

Leer las respuestas

#6 Hernando Gisinger
24/08/2007 - 17:23 | Informe spam
Tal vez lo que diga sea muy tonto, pero si quieres un ejecutable igual
al que tienes en vez de volver a compilar por que no copias el
ejecutable que generaste antes?

Elric escribió:
Al final lo he podido reducir a solo el TimeStamp de la cabecera del PE y a
unos 16 bytes que varian no se porque en medio de los ficheros.
Es solucionable, porque se puede detectar, ya que los 18 bytes que vienen
despues son siempre los mismos, y puestos a 0 no pasa nada

Me da la impresión que tiene que ser algun tipo de GUID en binario, porque
por el contenido adyacente parece el final de la parte de datos.

Los passos para reducirlo asi, han sido los siguientes:
- Properties-Build-Advanced-Debug Info = none (Solo en el Release)
- En el Assembly.cs el [assembly: ComVisible(false)] a true, porque sino no
hace caso del GUID y auto-genera uno.

Solo con eso tambien quita un par de timestamps que estaban delante del GUID
y de lo del Debug Info.

Respuesta Responder a este mensaje
#7 Elric
24/08/2007 - 23:18 | Informe spam
Tranqui no hay preguntas tontas.
Hay sectores donde pasar homologaciones és necesario. Software de
automovilismo, del recreativo, etc...
En las homologaciones lo que quieren és estar seguros que el codigo que les
entregas corresponde con el ejecutable que quieres homologar.
Para eso compilan, y comparan checksum o lo que sea del resultado suyo y del
ejecutable final que tu facilitaras a los clientes.
Homologar és que ellos certifican que el software cumple unos requisitos
para con el cliente. Por eso te piden que lo que compilan ellos sea igual a
lo que tu das, para que luego no puedas cambiar-lo a la ligera y variar la
funcionalidad y saltarte algun requisito.
Os aburrire, pero os doy un ejemplo:
La legislación española, no permite que el conductor pueda estar viendo
video en un monitor integrado en un coche. Como ahora hay GPS que tienen
entrada de AV, se le puede xutar una señal de DVD o lo que sea. Pues si tu
quieres vender ese GPS en España tienes que assegurar que eso no va a ser
possible. Por ejemplo, cortando la señal cuando el coche va a más de 5 km/h.
Eso se hace por software. Pues los de APPLUS o el homologador que sea,
comprueba esa opción directamente en el código del software que va en ese
GPS. Por lo tanto ellos tienen la necesidad que el software que tu pones
final en el GPS sea el mismo que el que generan ellos con el codigo que les
suministras. No lo hacen casi nunca, pero el dia que vayan a un GPS de esos y
el software que haya alli no corresponda con el homologado, te funden! ;).

Lo siento por la batallita.

Elric / Anaconda


"Hernando Gisinger" wrote:

Tal vez lo que diga sea muy tonto, pero si quieres un ejecutable igual
al que tienes en vez de volver a compilar por que no copias el
ejecutable que generaste antes?

Elric escribió:
> Al final lo he podido reducir a solo el TimeStamp de la cabecera del PE y a
> unos 16 bytes que varian no se porque en medio de los ficheros.
> Es solucionable, porque se puede detectar, ya que los 18 bytes que vienen
> despues son siempre los mismos, y puestos a 0 no pasa nada
>
> Me da la impresión que tiene que ser algun tipo de GUID en binario, porque
> por el contenido adyacente parece el final de la parte de datos.
>
> Los passos para reducirlo asi, han sido los siguientes:
> - Properties-Build-Advanced-Debug Info = none (Solo en el Release)
> - En el Assembly.cs el [assembly: ComVisible(false)] a true, porque sino no
> hace caso del GUID y auto-genera uno.
>
> Solo con eso tambien quita un par de timestamps que estaban delante del GUID
> y de lo del Debug Info.
>

Respuesta Responder a este mensaje
#8 Elric
24/08/2007 - 23:24 | Informe spam
Yo vengo del mundo del recreativo y las veo de todos los colores, porque cada
pais tiene sus propios homologadores, pero normalmente, una vez te has
saltado a los burocratas, acaba habiendo un tio de software que te comprende
un poco.

Pa mi los homologadores les importa un pito todo. Ellos lo que quieren és
computarte X horas a tropecientos euros y sencillamente te van poniendo pegas
hasta que llenan la ucha.

Lo del linker script, pilas, memoria, ... yo diria que en C# ya no rula
mucho ;).
Esta muy a alto nivel y ya no hay acceso "alguno/fàcil" a todo esto.

Elric / Anaconda


"RFOG" wrote:

On Fri, 24 Aug 2007 12:36:00 +0200, Elric
wrote:

> Hola,
> Mi empresa pasa homologaciones del software que realizamos, de tal manera
> que el software que acabamos instalando tiene que ser identico byte a
> byte
> con el que los homologadores generan a partir de nuestro codigo fuente
> original.
>
> Estoy haciendo pruebas en csharp tanto de ejecutables como de librerias
> dll
> y a cada compilacion hay varias secciones que cambian. Esto hace
> impossible
> la generación de un checksum del software que sea el mismo de
> compilación en
> compilación (en caso que no haya cambios de codigo, claro ;)).
>
> Me he fijado y parece que algunos cambios viene dados por el GUID, por la
> versión autoincremental y por la fecha. Pero hay otros que no entiendo a
> que
> se refieren.
>
> En resumen: Hay alguna manera "official" de conseguir que los ficheros de
> salida sean identicos de compilación en compilación?.
>
> muchas gracias.

Si son igual de rigurosos como los que yo a veces tengo que homologar...
No te van a aceptar que modifiques después de compilar a no ser que les
demuestres fehacientemente qué estás tocando de forma binaria... Y depende
de quién te toque, pues te pasará cualquier cosa o no te pasará
absolutamente nada.

Yo suelo convencerlos -lo que pasa es que no es para PC- diciendo que
marco el ejecutable con una firma... que toca el timestamp y varias
variables que yo mismo he creado en el script del linker.


En C# (vamos, en .NET) no lo he hecho nunca, pero existe una cosa que se
llama "linker script" que es una serie de macros e instrucciones que le
dicen al linker qué y dónde poner las cosas. Todos los programas lo
tienen, aunque no sea visible. En C++ nativo sí que está accesible, eso y
el startup para que lo modifiques y hagas cualquier cosa. Supongo que el
..NET tenga algo parecido, quizás sea el AssemblyInfo, pero seguro que
existe alguna forma de crear un script que le diga al liner el tamaño de
la pila, los diferentes segmentos y todo eso, y que diga que ponga como
stamps algunos números fijos en lugar de variables... ahora falta
encontrar eso.
Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
> La única forma de no darle a un árbol es apuntar a el.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida