質問

究極の目標は比較2バイナリのかを正確に同じソースの正確な同じ環境ですので、お声をかけることも実際には機能的に等価です。

一応このことは心の品質保証の時間は自分たちの間にリリースなどの変更を監視します。

MSVCムPEフォーマットを自然にこの非常に硬いいます。

これまでから、中和もの:

  • PEタイムスタンプをチェックサム
  • デジタル署名のディレクトリに入
  • デバッガ部タイムスタンプ
  • PDBの署名、年齢、ファイルパス
  • 資源タイムスタンプ
  • すべてのファイル/製品バージョンVS_VERSION_INFO資源
  • デジタル署名部

私の解析PE、オフセットサイズのためのすべてのものを無視するバイトの範囲を比較する場合はbinaries.作品のような魅力をもため、いくつかの試験思います。えしましたが署名した実行可能なバージョン1.0.2.0建勝Server2008は符号なし、バージョン10.6.6.6構築を行っWin XP devボックスなどのコンパイラのバージョン、全て源のヘッダは同じです。こうVC7.1--9.0でした。(リリースを構築)

一つの点に注意してください。

絶対パスの両方を構築 と同じでなければなら を作成するときに必要となる長さです。

cl.exe 変換を相対パスに絶対的なものをやることによって出来上がってい権オブジェとコンパイラフラグです。このunproportionalへの影響全体のバイナリー.一文字の変更パスの結果につバイトに変更があちこちの何倍ものです。文部しかし多くの物は、リンク疑い).変更の長さのパスの結果大幅なります。もobjファイルやリンクのバイナリ.

感じファイルのパスコンパイルフラグを使用して何らかのハッシュ、かつバイナリも影響を配置秩序の関係のない作品のコンパイルされたコード.

こちらではの3つの問題として"何を?"):

  • きを放棄するプロジェクト全体家族で思いの休憩物理法則の企業政策のMS?

  • 仮に取り扱っており絶対パス号(政策のレベルによ魔法のコンパイラフラグ)、その他のものはいらないようお願いしですか?(のような__時間__ 平均変更コードを思う心がない無視してる)

  • はしてもらえると助かりますから力をコンパイラを利用相対パス、または馬鹿での思考の道なのですか。

その理由の一つは、美しく迷惑にWindowsファイルシステム。だけではわからない時に削除する複数のお届けの価値の源物svnメタデータが失敗したローグファイルのロックが解除されます。少なくとも新たなルートは常に成功しながらスペースがあります。走る複数のビルドを一度問題です。走っVMsを解決し、重います。

か方法はありますのでセットアップの仮想ファイルシステムのためのプロセス、そのほとんどの複数の工程で木々が見えます 異なる "C:\build"dirs、個て、すべての時間---軽量仮想化の...

更新: また最近ではopensourcedのツール GitHub.見 の比較 部門書です。

役に立ちましたか?

解決

いることにある。

現在、構築システムにあるすべて新しいビルドは一定の長さ(ビルド/001だけでなく、ビ/002など)、これを避ける変化のPEす。後の構築ツールを比較し、新旧のバイナリを無視して関連するPE分野およびその他の場所で知られる表面的な変化する。でも簡単なヒューリスティックスを検出す動的に、避けます。こちらではの完全なリストも無視する:

  • PEタイムスタンプをチェックサム
  • デジタル署名のディレクトリに入
  • 輸出テーブルのタイムスタンプ
  • デバッガ部タイムスタンプ
  • PDBの署名、年齢、ファイルパス
  • 資源タイムスタンプ
  • すべてのファイル/製品バージョンVS_VERSION_INFO資源
  • デジタル署名部
  • MIDLバスタブのための埋め込み型図書館(タイムスタンプ文字列)
  • __FILE__,__日付__、__時間__マクロの場として使用されているリテラル文字列のとき、幅又は狭いchar)

らのリンカーのようであPE部大を廃棄せずに何か他のものにアライメントを実施します。なっているように見えますが動部境界の内側のパディングでゼロの周りにもでかなバイナリを1バイト。

更新: また最近ではopensourcedのツール GitHub.見 の比較 部門書です。

他のヒント

Standardiseパスを構築すること

簡単に解決するstandardiseおパスを構築することそのもの、例えば:

c:\buildXXXX

それを比較すると、 build0434build0398, は、前処理のバイナリに変更すべての発生 build0434build0398.選択パターンだが示、実際のソース/データを除き、文字列のコンパイラ/リンカーを埋め込み、PE.

その後できるだけでなお通常の違いを解析するするか、又はこれと同等以上の長さのパス名なシフトデータが周りの原因誤検知.

Dumpbin明

他のチップを使用 dumpbin.exe (船舶MSVC).使用 dumpbin/全 をダンプすべての内容をバイナリへのテキスト/hexダンプこのつくることができますがより明らかなう場所が変わりつつあります。

例えば:

dumpbin /all program1.exe > program1.txt
dumpbin /all program2.exe > program2.txt
windiff program1.txt program2.txt

使用お気に入りのテキスト差分をツールの代わりにWindiff.

Bindiff明

簡ト bindiff.exe ツールの有用も重要との認識が強まっている。

Windows XP Service Pack2をサポートツール

このa/vオプション指導までを無視する一定のバイナリーなどの削減といったチェックサムです。

"BinDiffに特殊なルーチンの比較 Win32実行可能ファイルのマスク 各種の構築時にスタンプ分野 両方のファイルに適合しているか、 を比較できます。この二つの実行 ファイル"欄が"近くには同一の" 時のファイルをめぐり、 時間を除くれた。"

しかし、そのような きの間ですでに実施している は、上位集うbindiff.exe います。

があるので、どちらかの力 コンパイラを利用相対パス、または 馬鹿での思考の道はない 何ですか。

てこれを行なうには二つ方法:

  1. をご利用subst.exe コマンドのマドライブへの手紙のフォルダを求めることはできないと信頼性).
  2. の場合subst.exe なで作成する株式のビルドフォルダの"ネット利用"コマンドを実行します。このほぼ確実にすべきます。

いずれの場合も、使い地図を再利用し、同じドライブレターのためのフォルダを始める前に、特定の構築とそのパスが同じコンパイラです。

あなたは実行ファイルを分解し、分解を比較したことがありますか?それはあなたが言及気が散るの詳細の多くを削除し、非常に簡単に他の人を削除すべきである。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top