2011-12-30 12 views
9

3つのバイナリファイルがあります。 file1.binfile2.binfile3.binとしましょう。3つのバイナリファイルの差分。

  • file1.binおよびfile2.binは、いくつかの共通部分を有する。
  • file2.binおよびfile3.binには共通の部分があります。

私はfile2.binfile3.bin間で異なるfile1.binfile2.bin間の共通部分を見つけたいです。

これを行うにはどうすればお勧めですか?私はすでにバイナリファイルをxxdを使ってテキストファイルにダンプしてから、vim -d file1.txt file2.txt file3.txtを使って3-way diffを実行しました。

しかし、vimは、1つのファイルで変更されていても、他の2つのファイルに変更されていなくても、すべてのファイルで変更された部分をマークします。私はそれらの特別な種類の出現を異なってマーキングしたい。

答えて

6

おそらく、組み込みのunix diff(私はOSXの一部だと思いますが)を使うことができますが、--unchanged-group-formatを使用して類似点をリストします。これをfile1とfile2に対して行います。次に、file2とfile3に対して行います。 2つの結果ファイルに対して通常のdiffを実行することができます。

類似点を取得する方法については、this postをご覧ください。

-1

クロムはbsdiffを使用し、ブログhereで説明されているようにバイナリ差分を実行するためのcourgetteに切り替えました。彼らのブログから有益なリードが見つかるかもしれません。

+0

問題に記載されている方法で3ウェイ差分を行うことはできますか?どうやって見つけられないのですか? – Dimme

+0

bsdiffはバイナリファイルで動作し、バイナリパッチを生成します。 vimdiffはテキストファイルを入力として想定していますので、bsdiffをここで好きなように動作させる方法は考えられません。別の方法として、 '' diffexpr'''オプションを利用して、バイナリファイルのハンクを生成するときにdiffプログラムに余分な設定を使用するようにvimを同軸にすることができるかどうかを見てください。おそらく '' -I''オプションdiffを実行する際に無視すべき "行"の正規表現を指定するために "diff"に変換します。 – holygeek

0

私が働くツールは(ECMerge)です。 3つのバイナリファイルを比較するだけで、互いに等しい部分が表示され、その間に適切に配置された変更されたバイトが表示されます。最初に16進ダンプを取得する必要はありません。 JavaScriptでスクリプトを作成して、diff結果とファイル内のバイトに基づいて好きなものを出力できます(コマンドラインでも機能します)。

関連する問題