【问题标题】:diff - find specific change between two values in hex dumpdiff - 在十六进制转储中查找两个值之间的特定变化
【发布时间】:2013-05-05 00:01:28
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: vim hex diff vimdiff xxd


    【解决方案1】:

    我用:

    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
    

    【讨论】:

    • 这提供了两个二进制到文本文件的输出的文本模式比较,我已经在vim 中生成了这些文件。鉴于我知道单个字段将从值 x 开始,而在第二个文件中的值将是 y,这如何解决特定于字段的比较问题?
    • 我不明白这个问题。 cmp -l 将“打印每个差异的字节数(十进制)和不同的字节值(八进制)。”只需grep 通过该列表获取已知值,它就会为您提供小数偏移量。
    • 现在我明白你的意思了。感谢您的耐心等待!
    • 一个细微的变化可能是:vim -d
    猜你喜欢
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2012-07-02
    • 2018-01-16
    • 2016-10-19
    • 2018-07-26
    • 2018-07-26
    相关资源
    最近更新 更多