diff - 在十六进制转储中查找两个值之间的特定更改

时间:2013-05-05 00:01:29

标签: vim hex diff vimdiff xxd

我正在从我的基本命令行程序分析来自二进制数据转储的十六进制数据。我基本上将结构的确切内容(实际上是一大堆结构)转储到文本文件中。

然后我创建了第二个二进制转储,并使用vim比较xxd中的两个文件,以创建原始数据的二进制到文本表示。

这两个文件的大小完全相同(以字节为单位),我试图以有意义的方式比较这两个文件。在转储文件之前,即使数据发生微小变化,也会导致文件其他部分发生较大变化,因为其他部分包含哈希,基于我更改的值的函数等等。

是否可以告诉diffvimdiff说,比较两个文件,并只显示原始文件中文件的哪些部分(即:文件1)设置了值到1,在第二个文件中,值设置为32

谢谢!

1 个答案:

答案 0 :(得分:9)

我用:

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

这使用process substitution来比较两个xxd进程的输出。请注意,这仍然显示行差异,因此如果一行上的任何字节不同,它将被列出。这提供了一个很好的hexdump外观比较。

然而,经典的工具是cmp

所以,这可以这样处理:

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

这将准确列出您需要的内容,并打印出以下字段:

OFFSET  VALUE_IN_FILE_1 VALUE_IN_FILE_2