Ho creato una semplice applicazione "Hello World" in VS2005. È un'applicazione console diretta; contiene solo le righe seguenti:Come posso sapere se un "assemblaggio" è davvero cambiato?
Console.WriteLine("Hello World");
Console.ReadLine();
Quando ho cercato di ricostruire la stessa applicazione console senza eseguire alcuna modifica (basta premere il pulsante ricostruire), ottengo un eseguibile leggermente diverso. (Ho generato un hash SHA-1 sia dal 1 ° che dal 2 ° generato ed è diverso!)
Perché è diverso quando non ci sono modifiche al codice? Cosa è effettivamente cambiato? Ho usato un editor esadecimale per confrontare e ho visto solo un paio di byte diversi.
Credo che la mia ultima domanda sia, come faccio a sapere se un "assemblaggio" è davvero cambiato? (Naturalmente, senza guardare le versioni del file, dimensione del file, ecc)
EDIT
Finora, abbiamo stabilito che la differenza sta nell'intestazione PE (timestamp e alcuni dati di debug). Prima di re-inventare la ruota, c'è uno strumento di "confronto di assieme" che ignora l'intestazione PE?
Grazie, Ian
Per ignorare correttamente quei byte, ho bisogno di sapere la posizione e l'intervallo di quei byte giusto? C'è una documentazione di qualche tipo che posso leggere? – Ian
Ecco il collegamento alla documentazione in formato PE da MSDN: http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx Intendevo il timestamp nell'intestazione COFF e il contenuto della directory di debug. Tuttavia sarei molto sorpreso se gli strumenti per farlo non esistessero già - ma non ne conosco uno, mi dispiace. – Rup
Wow, l'hai inchiodato. È il timestamp e alcuni dati di debug! 4C4953A4 data ora timbro ven lug 23 16:32:36 2010 4C4953A4 cv 6D 000026E4 8E4 Formato: RSDS, {F421268D-98D4-4D76-B70D-9C3E398E5426}, 1, C: \ HelloWorld \ HelloWorld \ obj \ x86 \ Debug \ HelloWorld.pdb * utilizzando dumpbin/all/rawdata: none – Ian