【问题标题】:Recursively find hexadecimal bytes in binary files递归查找二进制文件中的十六进制字节
【发布时间】:2017-10-18 03:46:39
【问题描述】:

我在 bash shell 中使用 grep 在文件中查找一系列十六进制字节:

$ find . -type f -exec grep -ri "\x5B\x27\x21\x3D\xE9" {} \;

搜索工作正常,但我知道在不使用仅返回结果的 -a 选项时匹配存在限制:

Binary file ./file_with_bytes matches

我想得到匹配结果的偏移量,可以吗?我愿意使用另一个类似的工具,但我不确定它会是什么。

【问题讨论】:

    标签: bash macos grep find


    【解决方案1】:

    实际上在 grep 中有一个选项可以使用

    -b --byte-offset  Print the 0-based byte offset within the input file
    

    使用此选项的简单示例:

    $ grep -obarUP "\x01\x02\x03" /bin
    

    打印出目录中匹配模式的文件名和字节偏移量

    /bin/bash:772067:
    /bin/bash:772099:
    /bin/bash:772133:
    /bin/bash:772608:
    /bin/date:56160:
    

    注意 find 实际上是不需要的,因为选项 -r 已经处理了递归文件搜索

    【讨论】:

      【解决方案2】:

      不是在电脑上,而是使用:

      od -x yourFile
      

      xxd yourFile
      

      让它以十六进制转储,左侧有偏移量。

      有时可能找不到您的搜索字符串,因为这些字符不是连续出现而是分成两行。不过,您可以将文件传递两次,第二次将前 4 个字节切掉,以确保您的字符串在一次或另一次传递中完好无损。然后重新添加偏移量并对偏移量进行排序和唯一化。

      【讨论】:

        猜你喜欢
        • 2014-04-18
        • 2014-10-30
        • 2022-01-17
        • 2015-05-15
        • 2017-09-13
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        • 2015-08-08
        相关资源
        最近更新 更多