2011-12-28 7 views
4

Visual Studioでコンパイルされたチェックサムを使用して実行可能ファイルの検証に関する質問があります。 srcからプロジェクトをビルドすると、それにいくつかのメタデータを持っているexec1.exeと呼んでください。 後で同じ正確なsrcを再構築すると、exec2.exeという別の実行可能ファイルが作成され、独自のメタデータセクションも作成されます。同じ正確なソースから構築された2つの実行可能ファイルのチェックサムを比較する

2つのファイルのそれぞれについてチェックサムを作成すると、2つのファイル間のメタデータ情報が異なるため、チェックサムが異なります。 メタデータに関係なく、2つのファイルのチェックサムを実行すると、同じチェックサム値が返されるように、ファイルのチェックサムを実行するときにメタデータをバイパスする方法を知っている人はいますか?または、srcが同じである限り、同じ実行可能ファイルで終わるように、バイナリをコンパイルする方法は?あなたの入力を事前に

おかげで、 よろしく

+0

ここでPEデータにはこのメタデータが保存されていますか?あなたはまだそれを分離しましたか? – ildjarn

答えて

5

There is no guarantee that Visual C++ will generate the same binary image when building the same source files on successive builds.チェックサムがこのように使用することを目的とし、研究のビットの後に、達成することは困難であると思われていません。むしろ、this kb articleなどのリソースはファイルの比較に役立ちます。

通常、チェックサムはデータの送信/保存の結果発生するエラーを見つけるために使用され、実行可能ファイルのバージョン/ビルドを比較することはありません。

0

pdbファイルもある場合は、DIA sdkを使用して、実行可能ファイルのビルドに使用されたすべてのソースファイルを照会できます。基本的にすべてIDiaSourceFileを列挙し、それぞれIDiaSourceFileにはget_checksumメソッドがあります。実行可能ファイルの作成に使用されたすべてのソースファイルのチェックサムの組み合わせであるマスターチェックサムを生成できます。ソースファイルのチェックサムのいずれかが変更された場合、実行可能ファイルも同様に変更されていると考えることができます。

これは、Visual Studioがソースファイルがpdbと同期しているかどうかを判断するのと同じメカニズムで、デバッグの目的でステップインすることができます。

関連する問題