Компиляция дважды с Delphi 6 и получение одинаковой контрольной суммы в двоичном файле

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

До сих пор я обнаружил, что, скорее всего, метка времени будет записана компилятором в двоичный файл. Я могу обойти это, выполнив сравнение результатов dumpbin /rawdata в этой статье msdn.

http://support.microsoft.com/kb/164151

Однако результаты в дампбине все еще различаются примерно в дюжине мест, и, по-видимому, эта разница, по-видимому, является своего рода меткой времени (изменяющейся от A1 73 до C4 76).

Я предполагаю, что это временная метка, которую компилятор Delphi помещает в разделы кода / данных, но я не могу найти, где это происходит или как это отключить. Работа с различными параметрами компилятора / компоновщика не изменила это поведение.

Любая помощь будет принята с благодарностью.

3 ответа

Решение

Мы исследовали этот вопрос несколько лет назад, и, насколько я помню, ответ состоял в том, что люди из Borland/Codegear/Embarcadero не поддерживают идею о том, что компилятор должен производить точно такой же вывод, учитывая точно такой же ввод (учитывая, что текущая дата-время не считается входной информацией).

Это разочаровывает, но, учитывая, что Delphi устарела до десяти основных версий, она, вероятно, не изменится.

Основываясь на вашем комментарии в вопросе, я думаю, что вы ищете ответ на этот вопрос:

Как я могу проверить, что определенный двоичный файл создан определенным набором исходных файлов

Одним из способов является автоматизированный встроенный процесс, который:

  1. Вставляет уникальный тег подтверждения в исходный код (может быть таким же простым, как строка GUID или что-то еще во включаемом файле)
  2. Компилирует двоичные файлы, используя этот тег подтверждения
  3. Упаковывает полученный двоичный код и исходный код в дерево каталогов доставки

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

Я использую FinalBuilder для автоматизации таких процессов сборки.

--jeroen

К сожалению, я не слышал ни одного ответа на эту проблему.

Это не просто временные метки, но есть места, в которых несколько байтов случайного мусора из памяти заканчиваются результатом.

Другие вопросы по тегам