4

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

然后,我创建第二个二进制转储,并比较两个文件,vimxxd创建原始数据的二进制到文本表示。

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

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

谢谢!

4

1 回答 1

15

我用:

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

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

然而,用于此的经典工具是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 回答