Двоичная воспроизводимость в Visual C++

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

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам