Вопрос

Есть ли способ заставить один и тот же код создавать один и тот же двоичный файл в Visual C++?Другими словами, отключить временную метку в PE или заставить временную метку в PE иметь какое-то фиксированное значение?

Это было полезно?

Решение 2

Я полагаю, вы могли бы написать утилиту, которая откроет PE, установит контрольную сумму в 0, установит временную метку на то, что вам нравится, перевычислит crc, а затем запишет ее обратно.Однако было бы неплохо, если бы существовал официальный способ обеспечить идеальную двоичную воспроизводимость.

Для дополнительной информации:http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

Другие советы

Это не только временная метка — для сопоставления PDB используется встроенный GUID, как сказал Джон Роббинс. объясняет.

Даже помимо этого, просто невозможно заставить компилятор генерировать согласованные результаты, как сказал Джим Грисмер. объясняет -

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

Таким образом, порядок функций и секций нет гарантированно будет последовательно упорядочен в результирующем PE.Пример есть по ссылке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top