ブロックデバイスまたは画像ファイルがあるとします。また、バイトのシーケンス、文字列、または検索パターンもあるとします。このようなパターンや文字列の出現位置を取得するにはどうすればよいですか?そのためのツールはありますか?
簡単な解決策は、
grep -aob "string to find" /dev/blockdev
この質問には、正確に何を検索したいかに応じて、複数の回答があります。
バイナリファイル内のすべての文字列を検索する場合、コマンドはstrings:from マニュアル 、
strings(1)
名前
strings-印刷可能な文字の文字列をファイルに出力します。
....指定されたファイルごとに、GNUstringsは、少なくとも4文字の長さの印刷可能な文字シーケンスを出力します(または以下のオプションで指定された番号)そしてその後に印刷不可能な文字が続きますデフォルトでは、オブジェクトファイルの初期化およびロードされたセクションからの文字列のみを印刷します;他のタイプのファイルの場合、ファイル全体から文字列を印刷します。
代わりに、バイナリファイルでバイナリ文字列を検索する場合は、 bgrep を使用できます(リポジトリにはありません。私の知る限り):
bgrepは、バイナリファイル内のバイナリ文字列の出現を検索するためのユーティリティです。その名前が示すように、そのインターフェイスとデザインは、テキストファイル内のテキストパターンの出現を検索するために使用されるユビキタスな「grep」コマンドをモデルにしています。
または、次の方法を使用することもできます。
cat YourFile | hexdump -C | grep YourPattern
これはhexdump
を使用します:再び マニュアルから 、
hexdump(1)
名前
hexdump-ASCII、10進数、16進数、8進数のダンプ
便利な-C
形式を使用します。
-C正規の16進数+ ASCII表示。入力オフセットを16進数で表示し、その後に16個のスペース区切りの2列の16進数バイトを表示し、その後に '' | ''文字で囲まれた%_p形式の同じ16バイトを表示します。
-c
形式を好む人もいますが、
-c1バイトの文字表示。入力オフセットを16進数で表示し、その後に1行あたり16文字のスペースで区切られた、3列の、スペースで埋められた入力データの文字を表示します。