5

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

ответ

3

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

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

3

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

Даже кроме того, нет никакого способа, чтобы заставить компилятор генерировать стабильные результаты, как Джим Griesmer explains -

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

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

Смежные вопросы