C#/VB.NETで作成したWindows Formsのアプリケーションがあります。

同じソースコードから複数回ビルドをするとビルドするたびに生成されたファイルにバイナリ差分があります。これを回避したいです。

つまり、同じソースコードからであれば何度ビルドしてもバイナリ比較したら一致するようにしたいのです。

このようなことは可能でしょうか?
他に、この差分が検出される部分を除外してバイナリ比較する方法はありますか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/05/17 14:25:02
  • 終了:2013/05/24 11:49:57

回答(1件)

id:dawakaki No.1

だわかき回答回数797ベストアンサー獲得回数1222013/05/17 16:34:57

ポイント100pt

どのような条件でビルドされているのかにもよりますが、可能性として高いのはタイムスタンプや_DATE_マクロです。
http://ruffnex.oc.to/kenji/text/exe_inj/

これらは時々刻々と変わる値なので、どうしようもありません。

> 他に、この差分が検出される部分を除外してバイナリ比較する方法はありますか?
ありません。

id:mstkwb

ありがとうございます。
_DATE_マクロ等、日付時刻で変わるような情報をコードに取り込むことは無いので、何らかのタイムスタンプ等でしょうね。
そういった意図せず含まれてしまう情報を除外したかったのですが、どうやら無さそうですね...

2013/05/24 11:49:37
  • id:cx20
    だわかき さんが書かれているように、コンパイル時にタイプスタンプ等が記録される為、バイナリ部分に差分が出てしまうのは仕方ないかと思います。
    ちなみに、タイプスタンプ等が書かれるのは PE ヘッダと呼ばれる部分になります。
    詳細は、下記を参照ください。

    ■ EXEファイルの内部構造(PEヘッダ) (1/3):CodeZine
    http://codezine.jp/article/detail/412

    また、プログラムに変更ないかを調べる方法として、
    正攻法ではないかもしれないですが、「逆コンパイラ」を用いて、ソースを出力し、比較するという方法もありますので、参考まで。
    ■ 無償の逆コンパイラ「ILSpy」を利用するには?[C#] - @IT
    http://www.atmarkit.co.jp/fdotnet/dotnettips/1055ilspy/ilspy.html

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません