Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

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

P.S: Кому интересно проблема актуальна при испытаниях ПО на НДВ (по требованиям ФСТЭК и ФСБ)
Лучший ответ
Иван Сигаев Искусственный Интеллект (150195) 8 лет назад
Попробуй отключить отладочную информацию
Serwak SmileПросветленный (23197) 8 лет назад
Убрал все галки в блоке Debugging, на всякий случай перезапустил среду. Сбилдовал два раза - не помогло. Контр. Суммы разные.
Остальные ответы
IVan Ibargimovi Ученик (160) 8 лет назад
Закомпилить в Release? Взять другой компилятор? Использовать нормальный язык программирования?
Serwak SmileПросветленный (23197) 8 лет назад
Насколько знаю в BD7 нет релиза, точнее там нет дебага ибо всё по умолчанию билдуется в релиз

cyberforum.ru/delphi-beginners/thread1081490.html

По поводу других языков и компиляторов специально написал P.S в основном тексте вопроса. (Если в кратце, то ничего там уже не взять и не использовать, там рабочий процесс уже налажен, программы написаны, лицензии на Delphi 7 куплены)
Елена Серова Просветленный (21987) 8 лет назад
Интересно, как может ФСБ требовать изменить неизменяемое. Timestamp - часть стандарта Portable Executable (PE)
Serwak SmileПросветленный (23197) 8 лет назад
Привожу вам выдержку из своего же вопроса: "К слову сказать, у Lazarus нет такой проблемы и при повторном построении одного и того-же проекта контрольные суммы выходных экзешников будут совпадать. "
Елена Серова Просветленный (21987) не знаю, что такое Lazarus, но точно знаю, что ФСБ разрешило немало софта, которое сделано не на нём
Похожие вопросы