6

Visual C++ で同じコードを強制的に同じバイナリを生成する方法はありますか? PE のタイムスタンプをオフにするか、PE のタイムスタンプを強制的に固定値にしますか?

4

2 に答える 2

4

John Robbinsが説明しているように、これはタイムスタンプだけでなく、PDBマッチングに使用されるGUIDが埋め込まれています。

それを超えても、Jim Griesmerが説明するように、コンパイラに一貫した結果を生成させる方法はありません-

コンパイラの作成者は、生成されたものがすべてハードドライブに同じように配置されるようにするよりも、正しく機能するコードを生成してすばやく生成することにはるかに関心があります。コードを最適化するための多数の多様なメソッドと実装により、あるビルドが別のビルドとは異なる何かを行うために少し時間がかかる可能性が常にあります。したがって、最終的な結果は、同じ機能であるものに対して異なるビットのセットになる可能性があります。

したがって、機能とセクションの順序は、結果のPEで一貫して順序付けられることが保証されていません。例はリンクにあります。

于 2009-09-07T18:12:23.293 に答える
3

PE を開き、チェックサムを 0 に設定し、タイムスタンプを好きなように設定し、crc を再計算して、書き戻すユーティリティを作成できると思います。ただし、完全なバイナリ再現性を保証する公式の方法があればいいのですが。

詳細情報: http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

于 2009-09-01T16:13:47.017 に答える