Top.Mail.Ru
Ответы

Как отучить компилятор вставлять таймстампы в исполняемый файл? (+)

Для примера возьмём Delphi 7. Если создать новый проект с пустой формой во главе (для красоты кинул на него button), и построить (build) его два раза подряд с разницей, например, в минуту, то получим два exe-шника которые по идее должны быть идентичны (исходный код естественно не менялся). Но при сравнении контрольных сумм обоих файлов понимаем что файлы разные. В результате побайтового сравнения обоих файлов выясняем что у них около пятидесяти (50!) различии, но если приглядеться, то становится понятно что все различия однотипны, то есть во всех 50-ти местах где были найдены различия мы видим замену одной и той-же последовательности от одного до четырёх байтов на другую одну и ту же последовательность. Например байт 4е всегда меняется на 5f и так много раз. При дальнейшем разборе WinHex-ом понимаем что в теле exe-шника много раз встречается определённая последовательность из четырёх байтов которая в формате DOS Date как раз и показывает время сборки исполняемого файла. Таких таймстампов в рассматриваемом мной проекте встретилось, как я уже писал, около пятидесяти штук, что странно, так как если среда разработки хочет вставлять в исполняемый файл время билда, то зачем это делать столько раз? (хотя вспоминаю что-то про ресурсы и "их время") Но основной вопрос состоит в том, что нужно сделать чтобы отучить компилятор (или среду разработки) вставлять в exe-шник рассматриваемые выше таймстампы?
К слову сказать, у Lazarus нет такой проблемы и при повторном построении одного и того-же проекта контрольные суммы выходных экзешников будут совпадать.

P.S: Кому интересно проблема актуальна при испытаниях ПО на НДВ (по требованиям ФСТЭК и ФСБ)

По дате
По рейтингу
Аватар пользователя
Новичок
9лет

Попробуй отключить отладочную информацию

Аватар пользователя
Просветленный
9лет

Интересно, как может ФСБ требовать изменить неизменяемое. Timestamp - часть стандарта Portable Executable (PE)

Аватар пользователя
Ученик
9лет

Закомпилить в Release? Взять другой компилятор? Использовать нормальный язык программирования?