Visual Cでのバイナリ再現++
-
20-09-2019 - |
質問
Visual C ++で同じバイナリを生成するために同じコードを強制する方法はありますか?換言すれば、PEにタイムスタンプをオフにするか、いくつかの固定値であることがPEにタイムスタンプを強制
解決 2
私はその後出て戻ってそれを書き、CRCを再計算し、あなたが好きなものにタイムスタンプを設定し、0にチェックサムを設定し、あなたがPEを開くためのユーティリティを書くことができたとします。しかし、完璧なバイナリ再現性を確保するための公式の方法があった場合、それはいいだろう。
詳細については: http://msdn.microsoft.com/en-us/magazine/cc301805。 ASPXする
他のヒント
それだけでなく、タイムスタンプだ - PDBマッチングに使用埋め込まれたGUIDがあります - ジョン・ロビンズ<のhref = "http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/11/としてPDB-ファイル - 何 - すべての-開発者のマストknow.aspx」のrel = "nofollowをnoreferrerは"> に説明しています。
でもそれを超えて、一貫性のある結果を生成するコンパイラを強制する方法は、ジム・Griesmer <のhref = "http://blogs.msdn.com/jimgries/archive/2007/07/06/why-として、ちょうどありません「REL = "nofollowをnoreferrer"> に説明するビジュアル・スタジオ必要-デバッガ・シンボル・ファイル・ツー・正確に一致-バイナリ・ファイル、つまり、それらは、内蔵された-with.aspxはありません -
コンパイラの作家が正常に機能してコードを生成し、すぐに何でも生成されると、ハードドライブ上に同じようにレイアウトされていることを確実にするよりも、それを生成する際にはるかに興味を持っています。ためのコードを最適化するための数多くの様々な方法や実装に、1つのビルドが追加のまたは別のビルドがやったとは異なる何かをするもう少し時間になってしまったということは常に可能です。したがって、最終的な結果は同じ機能であり、何のためのビットの異なるセットであってもよい。
このように、関数とセクションの順序は、しないの一貫して得られたPEで注文することが保証されます。例は、リンクである。