Почему каждая сборка изменяет exe-файл? - PullRequest
2 голосов
/ 27 ноября 2008

Сборка одного и того же проекта (без каких-либо изменений) создает бинарных разных exe-файлов: некоторые их небольшие области различны Пустой проект, информация о версии (и автоинкремент при каждой сборке) отключена.

Почему это происходит? И можно ли заставить Delphi создавать одинаковые двоичные файлы для одних и тех же проектов?

Ответы [ 4 ]

15 голосов
/ 27 ноября 2008

Различные структуры в формате исполняемого файла PE, используемые Windows, включают временные метки, которые устанавливаются компилятором и компоновщиком.

Возможно выполнить постобработку файла, чтобы сбросить эти значения до определенной константы (я написал инструмент, чтобы сделать именно это для безопасного продукта, который нуждался в точных значениях хеш-функции), но это должно быть сделано только на готовом к исполняемые файлы, так как некоторые отладчики полагаются на временные метки при поиске исходного кода и т. д.

2 голосов
/ 27 ноября 2008

Попробуйте изменить проблему на «Как избежать компиляции, если нет изменений в источнике», возможно, будет проще разобраться.

1 голос
/ 27 ноября 2008

Я подозреваю, что компилятор вставляет в * .exe кодированное время, специальные порядковые номера (для управления версиями) и, возможно, другие вещи :) Невозможно заставить Delphi производить одинаковый двоичный вывод.

0 голосов
/ 27 ноября 2008

Может случиться так, что некоторые фактические метки времени будут скомпилированы в exe-файл.

...