3つのバイナリファイル(メモリダンプ)があります。それらをfile1
、file2
、file3
と呼びます。いくつかのソフトウェアをデバッグしようとしていますが、スイッチを切り替えています。
file1
=スイッチをオフにします
file2
=スイッチをオンにします
file3
=スイッチをオフにします
file1
とfile2
の間でどのバイトが変更されたかを知る必要があります。その後、file1
の同じ値(file3
として)に戻りました。
file1
、file2
の間には無関係な変更がたくさんあるため、このスイッチを切り替えたときに何が変更されているかを判断するには、diff
だけでは不十分です。識別しようとしています。 file1
、2
、3
、…から変化するエントロピーの一意のバイト
xxd
、diff
、vimdiff
、colordiff
などのツールがあることは知っています。この問題にそれらをどのように使用するのが最善かわかりません。
file1
とfile2
の間で変更されたバイトとそれぞれの値を知るには、cmp -l
を使用します。
cmp -l file1 file2 > changes12
同様に、file3
およびfile2
についても同様です。秘訣は常に同じ方向に調査することです(ここでは:オフからオンに切り替えます)。そのため、最後にfile2
を付けます。
cmp -l file3 file2 > changes32
今、あなたは同じ変更を見つけることができます:
comm -12 changes12 changes32
出力は次のようになります(例):
1629 152 112
これは、バイト1629
(10進数、番号付けは1
で始まります)が152
(8進数)から112
(8進数)に変更されたことを意味します。
ノート:
cmp -l
は、その出力を「列化」します。これは、先頭にスペースが含まれる行を印刷する可能性があることを意味します。最初の列の幅は入力サイズによって異なります。いくつかの実装はこれを行わないかもしれないと思います。懸念事項はほとんどありません:cmp
がもう一方よりも広い最初の列を生成する可能性があります。後のcomm
のコンテキストでは、これは受け入れられません。 awk '{print $1" "$2" "$3}'
にパイプすることで、出力を「非列化」できます。comm
はファイルがソートされていないと文句を言うことがあります。 sort
に保存する前に、changesAB
(sort -n
ではない)が必要です。これにより、予期しない順序が生成される可能性があります(たとえば、異なるバイト23
が表示されますafter異なるバイト100453
)。 comm
からsort -n
への出力。changes*
ファイルは巨大な場合があります。それらは中間的で一時的なものであるため、プロセス置換は良いアプローチかもしれません。ただし、これは非POSIXです。
# Korn Shell syntax example
comm -12 <(cmp -l file1 file2) <(cmp -l file3 file2)
comm
からの出力は、cmp
のさらに別の出力と一緒に使用して、無関係な変更をより適切に除外できます。
comm -12 changes12 changes32 > result1
cmp -l file4 file5 | comm -12 - result1 > result2
cmp -l file6 file5 | comm -12 - result2 > result3
でも覚えておいて:
cmp
する必要があります(たとえば、オフからオンに切り替えます)。… | comm -12 - result1 > result1
が間違っています。ドキュメンテーション:
カミルからの応答に基づいて、私はこれを使用して必要なものを取得しました。
cmp -l file1 file2 | awk '{print $ 1 "" $ 2 "" $ 3}' |並べ替え> changes_12
cmp -l file3 file2 | awk '{print $ 1 "" $ 2 "" $ 3}' |並べ替え> changes_32
comm -12changes_12changes_32> common_changes
私はWindowsユーザーであり、3つのファイル(一度に2つ)を相互に比較するなど、ファイルの比較にBeyondCompareを長年使用しています。
Beyond CompareにもLinuxディストリビューションがあるようですので、チェックしてみてください。
https://www.scootersoftware.com/download.php?zz=kb_linux_install
Windowsバージョンには、違いだけでなく、役立つ可能性のある他の多くの機能を表示するオプションがあることを私は知っています。 3通りの比較があるかどうか思い出せません。
私は彼らの開発や販売ではありません。ソフトウェアが大好きです。