假设我有一个块设备或一个图像文件。假设我还有一个字节序列或一个字符串或一些搜索模式。我如何才能获取此类模式或字符串出现的位置?有没有什么工具可以做到这一点?
答案1
一个简单的解决方案是使用
grep -aob "string to find" /dev/blockdev
- “a”开关将文件视为文本,因此它显示输出,“o”开关将输出限制为您正在搜索的偏移量和字符串,这样您就不会得到二进制垃圾,“b”开关告诉它也打印字节偏移量。
答案2
这个问题有多个答案,取决于你想搜索的具体内容。
如果你想找到所有字符串在二进制文件中,则命令是字符串: 从手册,
字符串(1)
姓名
字符串- 打印文件中可打印字符的字符串。
....对于给定的每个文件,GNU字符串打印长度至少为 4 个字符(或使用以下选项给出的数字)且后跟不可打印字符的可打印字符序列。默认情况下,它仅打印目标文件初始化和加载部分的字符串;对于其他类型的文件,它会打印整个文件中的字符串。
如果你有兴趣在二进制文件中搜索二进制字符串, 您可以使用命令行工具(据我所知,不在存储库中):
bgrep 是一个用于在二进制文件中搜索二进制字符串出现的实用程序。顾名思义,它的界面和设计模仿了无处不在的“grep”命令,用于在文本文件中搜索文本模式的出现。
或者,你可以使用以下策略:
cat YourFile | hexdump -C | grep YourPattern
再次使用hexdump
:来自手册,
十六进制转储(1)
姓名
十六进制转储- ASCII、十进制、十六进制、八进制转储
我使用方便的-C
格式:
-C标准的十六进制+ASCII 显示。以十六进制显示输入偏移量,后跟十六个空格分隔的两列十六进制字节,后跟以 ''|'' 字符括起来的 %_p 格式的相同十六个字节。
而有些人更喜欢以下-c
格式:
-C单字节字符显示。以十六进制显示输入偏移量,后跟每行 16 个以空格分隔、三列、空格填充的输入数据字符。