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

Clo*_*oud 4 vim diff hex vimdiff xxd

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

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

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

是否有可能告诉diff或者vimdiff说,比较两个文件,并只向我显示原始文件中的文件部分(即:文件1)设置的值1,在第二个文件中,该值设置为32

谢谢!

Jon*_*art 10

我用:

diff <(xxd file1.bin) <(xxd file2.bin)
Run Code Online (Sandbox Code Playgroud)

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

然而,经典的工具是cmp.

所以,这可以像这样处理:

cmp -l file1.raw file2.raw | grep -in "oldValue" | grep -in "newValue"
Run Code Online (Sandbox Code Playgroud)

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

OFFSET  VALUE_IN_FILE_1 VALUE_IN_FILE_2
Run Code Online (Sandbox Code Playgroud)

  • 你看看`cmp`了吗? (2认同)
  • 我不明白这个问题。`cmp -l` 将“打印每个差异的字节数(十进制)和不同的字节值(八进制)”。只需通过该列表“grep”查找已知值,它就会为您提供十进制偏移量。 (2认同)