扫描图像文件或磁盘以获取图案并返回其位置

Mel*_*lab 6 linux disk-image block-device

假设我有一个块设备或一个图像文件。并且说我还有一个字节序列或一个字符串或一些搜索模式。如何获得这种模式或字符串出现的位置?有什么工具可以做到这一点吗?

Mar*_*iae 0

这个问题有多个答案,具体取决于您想要搜索的内容。

\n\n

如果您希望查找二进制文件中的所有字符串,则命令是strings:来自手册

\n\n
\n

字符串(1)

\n\n

姓名

\n\n

strings - 打印文件中可打印字符串。

\n\n

.... 对于给定的每个文件,GNU字符串打印至少 4 个字符长(或下面选项给出的数字)的可打印字符序列,后面跟着一个不可打印的字符。默认情况下,它仅打印目标文件的初始化和加载部分中的字符串;对于其他类型的文件,它会打印整个文件中的字符串。

\n
\n\n

如果您有兴趣在二进制文件中搜索二进制字符串则可以使用bgrep(不在存储库中,据我所知):

\n\n
\n

bgrep 是一个用于搜索二进制文件中出现的二进制字符串的实用程序。顾名思义,它的界面和设计是根据无处不在的 \xe2\x80\x9cgrep\xe2\x80\x9d 命令建模的,该命令用于搜索文本文件中文本模式的出现。

\n
\n\n

或者,您可以使用以下诡计:

\n\n
cat YourFile | hexdump -C | grep YourPattern\n
Run Code Online (Sandbox Code Playgroud)\n\n

这使用hexdump:再次来自手册

\n\n
\n

十六进制转储(1)

\n\n

姓名

\n\n

hexdump - ascii、十进制、十六进制、八进制转储

\n
\n\n

我使用方便的-C格式:

\n\n
\n

-C规范的十六进制+ASCII 显示。以十六进制显示输入偏移量,后跟 16 个以空格分隔的两列十六进制字节,再后跟 %_p 格式的相同的 16 个字节,并用 \'\'|\'\' 字符括起来。

\n
\n\n

虽然有些人更喜欢这种-c格式:

\n\n
\n

-c一字节字符显示。以十六进制显示输入偏移量,后跟每行十六个空格分隔的三列、空格填充的输入数据字符。

\n
\n