3

そのため、再コンパイル時にexeに同じハッシュコード/チェックサムを持たせる方法を見つけようとしています。FastSum を使用してチェックサムを生成しています。現在、コードの変更は行われていません。VS でプロジェクトを再構築しているだけで、チェックサムが異なります。コードは c++ で書かれています。

私はこの方法でハッシュ コードやチェックサムを使用することに慣れていませんが、いくつかの調査を行い、一貫した GUID の必要性について何かを読みました。しかし、それがチェックサム生成プログラムにどのように結びつくのかわかりません...

まあ、それは置いておきます、よろしくお願いします。

4

3 に答える 3

4

exeの違いを調べましたか?コンパイラ/リンカーが日付または時刻をバイナリに挿入していると思われます。その結果、各バイナリは別のバイナリとは異なります。または、さらに悪いことに、コンパイラ/リンカーが独自のシステムメモリに静的テーブルを構築し、それをバイナリにコピーすることがあります.9バイトの何かがあり、アラインメントの理由から、コンパイラがバイナリで12バイトを使用することを選択したとします.コンパイラ/リンカーは、そのコンピューターのシステムメモリにある 3 バイトを取得し、それをファイルにコピーします。理想的には、ツールがそのようなことのために使用しているメモリをゼロにして、繰り返し可能な結果を​​得たいと思うでしょう。

基本的に、ファイル間でバイナリ差分を実行してから、一致しない理由を見つけてください。

于 2011-04-26T18:47:53.790 に答える
0

これはマネージバイナリですか?マネージドバイナリには、ビルドごとに変更されるGUIDセクションがあり、それを停止するためにできることはあまりありません。

「link/dump /all[ファイル名]」または「link/dump / disasm [ファイル名]」を実行すると、バイナリの変更をよりよく確認できます。/ allオプションは、すべての16進値とそれに相当するASCII値を表示しますが、/ disasmオプションは、コードを逆アセンブルしてアセンブリで表示します。これは読みやすくなりますが、いくつかの些細な違いを無視する可能性があります。ハッシュが変更されました。

于 2011-11-02T21:38:31.837 に答える
0

私が思い出したことから、EXE 形式にはビルド タイムスタンプが含まれているため、そのタイムスタンプを含む exe のハッシュは再コンパイルのたびに変更されます。

于 2011-04-26T18:46:11.437 に答える