2017-10-18 19 views
0

我使用的bash shell中的grep找到文件中的一系列十六进制字节:递归发现的十六进制字节的二进制文件

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

搜索工作得很好,虽然我知道有一个为当不匹配的限制使用-a选项,其中只有结果返回:

Binary file ./file_with_bytes matches 

我想获得的匹配结果的偏差,这可能吗?我愿意用另一个类似的工具,我只是不知道会是什么感觉。

回答

0

实际上有在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是行为ually没有必要的,因为该选项-r已经采取的递归搜索文件

护理
0

完全没有一台电脑,但使用方法:

od -x yourFile 

xxd yourFile 

得到它在十六进制倾倒与左侧偏移。

有时候你的搜索字符串可能不被发现,因为字符不会连续出现,但两行被分割。您可以通过传递文件,虽然两次,砍掉第二次前4个字节,以确保您的字符串中找到完整的一个通行证或其他。然后添加offest重新开启,排序和uniq的偏移。

相关问题