контрольная сумма exe разная после каждой перекомпиляции - PullRequest
2 голосов
/ 26 апреля 2011

Так что я пытаюсь выяснить, как заставить мой exe-файл иметь тот же хэш-код / ​​контрольную сумму, когда он перекомпилируется.Я использую FastSum для генерации контрольной суммы.В настоящее время никаких изменений в коде не производится, я просто перестраиваю проект в VS, и контрольная сумма получается другой.Код написан на c ++.

Я не знаком с использованием хэш-кодов и / или контрольных сумм таким образом, но я провел некоторое исследование и кое-что прочитал о необходимости согласованного GUID.Но я понятия не имею, как это будет связано с программой генерации контрольной суммы ...

Хорошо, я оставлю это на этом, заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 26 апреля 2011

Вы изучили различия между бывшими? Я подозреваю, что компилятор / компоновщик вставляет дату или время в двоичный файл, и в результате каждый двоичный файл будет отличаться от другого. Или может быть и хуже, иногда компиляторы / компоновщики создают статические таблицы в своей собственной системной памяти, а затем копируют это в двоичный файл, скажем, у вас есть 9 байтов чего-то, и по причинам выравнивания компилятор выбирает использовать 12 байт в двоичном коде, я видел компиляторы / компоновщики берут все 3 байта в системной памяти этого компьютера и копируют их в файл. В идеале вы хотели бы, чтобы инструменты обнуляли память, которую они используют для такой вещи, чтобы вы получали повторяемые результаты.

Обычно делайте двоичные различия между файлами, после чего вы должны выяснить, почему они не совпадают.

0 голосов
/ 03 ноября 2011

Это управляемый бинарный файл?В управляемых двоичных файлах есть раздел GUID, который изменяется от сборки к сборке, и вы ничего не можете сделать, чтобы остановить это.

Вы можете лучше посмотреть на изменения в вашем двоичном файле, выполнив команду "link / dump / all [имя файла] "или" ссылка / дамп / disasm [имя файла] ".Параметр / all покажет вам все шестнадцатеричные значения, а также их эквивалент ascii, а параметр / disasm будет дизассемблировать код и показывать его вам в сборке, что может быть проще для чтения, но может игнорировать некоторые тривиальные различия, которые могут иметьвызвал изменение хэша.

0 голосов
/ 26 апреля 2011

Насколько я помню, формат EXE включает временную метку сборки, поэтому хэш exe, включая эту временную метку, будет меняться при каждой перекомпиляции.

...