Компиляция дважды с Delphi 6 и получение одинаковой контрольной суммы в двоичном файле
В целях проверки двоичного / исходного кода, я хотел бы иметь возможность сделать две компиляции на одном компьютере с интервалом в две недели, чтобы двоичные файлы были идентичными и, таким образом, проходили некоторые проверки контрольной суммы.
До сих пор я обнаружил, что, скорее всего, метка времени будет записана компилятором в двоичный файл. Я могу обойти это, выполнив сравнение результатов dumpbin /rawdata в этой статье msdn.
http://support.microsoft.com/kb/164151
Однако результаты в дампбине все еще различаются примерно в дюжине мест, и, по-видимому, эта разница, по-видимому, является своего рода меткой времени (изменяющейся от A1 73 до C4 76).
Я предполагаю, что это временная метка, которую компилятор Delphi помещает в разделы кода / данных, но я не могу найти, где это происходит или как это отключить. Работа с различными параметрами компилятора / компоновщика не изменила это поведение.
Любая помощь будет принята с благодарностью.
3 ответа
Мы исследовали этот вопрос несколько лет назад, и, насколько я помню, ответ состоял в том, что люди из Borland/Codegear/Embarcadero не поддерживают идею о том, что компилятор должен производить точно такой же вывод, учитывая точно такой же ввод (учитывая, что текущая дата-время не считается входной информацией).
Это разочаровывает, но, учитывая, что Delphi устарела до десяти основных версий, она, вероятно, не изменится.
Основываясь на вашем комментарии в вопросе, я думаю, что вы ищете ответ на этот вопрос:
Как я могу проверить, что определенный двоичный файл создан определенным набором исходных файлов
Одним из способов является автоматизированный встроенный процесс, который:
- Вставляет уникальный тег подтверждения в исходный код (может быть таким же простым, как строка GUID или что-то еще во включаемом файле)
- Компилирует двоичные файлы, используя этот тег подтверждения
- Упаковывает полученный двоичный код и исходный код в дерево каталогов доставки
Вы должны убедиться, что ваш исходный код действительно использует этот проверочный тег (например, показывая в поле about или что-то подобное).
Я использую FinalBuilder для автоматизации таких процессов сборки.
--jeroen
К сожалению, я не слышал ни одного ответа на эту проблему.
Это не просто временные метки, но есть места, в которых несколько байтов случайного мусора из памяти заканчиваются результатом.