Domanda

C'è un modo per forzare lo stesso codice per produrre lo stesso binario in Visual C ++? Spegnere il timestamp in PE o forzare il timestamp in PE ad essere qualche valore fisso, in altre parole?

È stato utile?

Soluzione 2

Immagino che si potrebbe scrivere un programma di utilità per aprire il PE, impostare il checksum per 0, impostare il timestamp per quello che ti piace, ricalcolare il CRC, poi scrivere di nuovo fuori. Sarebbe bello se ci fosse un modo ufficiale per garantire la perfetta riproducibilità binario, però.

Per ulteriori informazioni: http://msdn.microsoft.com/en-us/magazine/cc301805. aspx

Altri suggerimenti

Non è solo un timestamp - c'è un GUID incorporato utilizzato per il progetto preliminare di bilancio di corrispondenza - come John Robbins spiega .

Anche oltre a questo, non c'è proprio nessun modo per forzare il compilatore a generare risultati coerenti, come Jim Griesmer spiega -

  

scrittori del compilatore sono molto più interessati a generare correttamente funzionante del codice e la generazione in fretta che garantire che tutto ciò che viene generato è disposto in modo identico sul disco rigido. A causa dei numerosi e vari i metodi e le implementazioni per l'ottimizzazione del codice, è sempre possibile che una costruzione è conclusa con un po 'più di tempo per fare qualcosa in più o di diverso rispetto ad un altro accumulo ha fatto. Pertanto, il risultato finale potrebbe essere un diverso insieme di bit per ciò che è la stessa funzionalità.

In questo modo, la funzione e l'ordine sezione sono non garanzia di essere costantemente ordini in risultante PE. Un esempio è al link.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top