Scannen Sie die Bilddatei oder Diskette nach Muster und geben Sie ihren Speicherort zurück

2329
Melab

Angenommen, ich habe ein Blockgerät oder eine Bilddatei. Angenommen, ich habe auch eine Folge von Bytes oder eine Zeichenfolge oder ein Suchmuster. Wie kann ich die Positionen der Vorkommen eines solchen Musters oder einer solchen Zeichenfolge ermitteln? Gibt es dafür Werkzeuge?

2

2 Antworten auf die Frage

2
davidgo

Eine einfache Lösung wäre zu verwenden

grep -aob "string to find" /dev/blockdev 
  • Die Option "a" behandelt die Datei als Text. Sie zeigt die Ausgabe an, die Option "o" begrenzt die Ausgabe auf den Offset und die Zeichenfolge, nach der Sie suchen, sodass Sie keine binären Datenmüll erhalten, und die Option "b" teilt dies mit um auch den Byte-Offset zu drucken.
0
MariusMatutiae

Diese Frage hat mehrere Antworten, je nachdem, wonach Sie genau suchen möchten.

Wenn Sie alle finden mögen Zeichenkette in einer Binärdatei, dann ist der Befehl Strings : aus dem Handbuch ,

Streicher (1)

Name

Zeichenfolgen - Drucken Sie die Zeichenfolgen der druckbaren Zeichen in Dateien.

.... Für jede angegebene Datei werden mit GNU- Zeichenfolgen die druckbaren Zeichenfolgen gedruckt, die mindestens vier Zeichen lang sind (oder die Zahl, die mit den folgenden Optionen angegeben wird), auf die ein nicht druckbares Zeichen folgt. Standardmäßig werden nur die Zeichenfolgen aus den initialisierten und geladenen Abschnitten der Objektdateien gedruckt. Bei anderen Dateitypen werden die Zeichenfolgen aus der gesamten Datei gedruckt.

Wenn Sie stattdessen interessiert sind eine Binärdatei für eine bei der Suche Binärkette, können Sie bgrep (nicht in der repos, AFAIK):

bgrep ist ein Dienstprogramm zum Suchen nach Vorkommen von binären Zeichenfolgen in Binärdateien. Wie der Name vermuten lässt, wurde die Benutzeroberfläche und das Design nach dem allgegenwärtigen "grep" -Befehl modelliert, mit dem nach Textmustern in Textdateien gesucht wird.

Alternativ können Sie den folgenden Trick verwenden:

cat YourFile | hexdump -C | grep YourPattern 

Dies verwendet hexdump: wieder aus dem Handbuch ,

Hexdump (1)

Name

hexdump - ASCII, dezimal, hexadezimal, oktaler Speicherauszug

Ich benutze das bequeme -CFormat:

-C Canonical Hex + ASCII-Anzeige. Zeigen Sie den Offset der Eingabe hexadezimal an, gefolgt von sechzehn durch Leerzeichen getrennten, zweispaltigen, hexadezimalen Bytes, gefolgt von den gleichen sechzehn Bytes im% _p-Format, die in '' | '' - Zeichen eingeschlossen sind.

während einige Leute das -cFormat bevorzugen :

-c Ein-Byte-Zeichenanzeige. Zeigen Sie den Eingangsversatz hexadezimal an, gefolgt von sechzehn durch Leerzeichen getrennten, dreispaltigen, mit Spalten versehenen Zeichen der Eingabedaten pro Zeile.