4

私の基本的なコマンドライン プログラムからのバイナリ データ ダンプから 16 進データを分析しています。基本的に、構造体 (実際には構造体の大きな配列) の正確な内容をテキスト ファイルにダンプしています。

vim次に、2 番目のバイナリ ダンプを作成し、2 つのファイルを使用して比較しxxd、元のデータのバイナリからテキストへの表現を作成します。

どちらのファイルもバイト単位でまったく同じサイズであり、意味のある方法で 2 つを比較しようとしています。ファイルをダンプする前にデータに小さな変更を加えただけでも、ファイルの他の部分に大きな変更が生じます。これは、変更した値に基づくハッシュや関数などを含む他のセクションが原因です。

2 つのファイルを比較して、元のファイル (つまり、ファイル 1) で値が に設定さdiffれ、2 番目のファイルで値が?vimdiff132

ありがとうございました!

4

1 に答える 1

15

私が使う:

diff <(xxd file1.bin) <(xxd file2.bin)

これは、プロセス置換を使用して、2 つのプロセスの出力を比較しxxdます。これはまだ行の違いを示していることに注意してください。したがって、行のいずれかのバイトが異なる場合はリストされます。これにより、16 進ダンプの見栄えのよい比較が得られます。

ただし、このための古典的なツールはcmp.

したがって、これは次のように処理できます。

cmp -l file1.raw file2.raw | grep -in "oldValue" | grep -in "newValue"

これにより、必要なものが正確にリストされ、次のフィールドが出力されます。

OFFSET  VALUE_IN_FILE_1 VALUE_IN_FILE_2
于 2013-05-05T00:16:05.127 に答える