Компиляция дважды с Delphi 6 и получение одинаковой контрольной суммы в двоичном файле - PullRequest
5 голосов
/ 02 декабря 2009

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 02 декабря 2009

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

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

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

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

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

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

- Йерун

1 голос
/ 03 декабря 2009

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

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

0 голосов
/ 02 декабря 2009

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

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

...