Datei (1) und Magie (5): Beschreibung anderer Formate

8

Kann ich fileund magic( http://linux.die.net/man/5/magic ) verwenden, um die Beschreibung einiger anderer bekannter Formate zu überschreiben?

Zum Beispiel möchte ich folgende Formate beschreiben:

das sind 'nur' Textdateien

Oder

Das ist 'nur' eine komprimierte Datei, die mit der magischen Nummer beginnt BAM\1

?

Kennst du ein Beispiel?

Ist es möglich, einen benutzerdefinierten C-Code zum Testen der Datei bereitzustellen, anstatt das magische Format zu verwenden?

Pierre
quelle
1
Mögliches Duplikat der Liste
aktualisieren

Antworten:

8

Sie können die -mOption verwenden, um eine alternative Liste von Magiedateien anzugeben. Wenn Sie Ihre eigene vor der kompilierten Magiedatei ( /usr/share/file/magic.mgcauf meinem System) in diese Liste aufnehmen, werden diese Muster vor den "globalen" getestet. Sie können eine Funktion oder einen Alias ​​erstellen, um diese Option transparent und immer transparent zu verwenden, indem Sie einfach den fileBefehl ausgeben .

Die in Magic File verwendete Sprache ist sehr leistungsfähig, sodass selten auf benutzerdefinierte C-Codierung zurückgegriffen werden muss. Das einzige Mal , dass ich geneigt fühlte , war, so in den 90er Jahren , als passende HTML und XML - Dateien schwierig war , weil es keine Möglichkeit gab (damals) die flexible Hülle zu haben und notwendige Offset Anpassung der Lage sein , zu analysieren <HTMLund < Htmlund < htmlmit einem Muster . Ich habe das in C als Modifikator für das 'String'-Muster implementiert, was das Ignorieren von Groß- und Kleinschreibung und das Komprimieren von (optionalen) Leerzeichen ermöglicht .

Diese Änderungen in C erforderten auch eine Anpassung der magischen Dateien . Und wenn sich der fileQuellcode seitdem nicht wesentlich geändert hat, müssen Sie in magicDateien, die diesen C-Code-Änderungen entsprechen , immer Regeln ändern (oder zusätzliche Regeln bereitstellen) . Sie können also genauso gut versuchen, dies nur mit Änderungen an den magischen Dateien zu tun, und auf die Änderung des C-Codes zurückgreifen, wenn dies wirklich nicht funktioniert.

Anthon
quelle
Danke, das Github-Repo mit den Beispielen war sehr nützlich.
Pierre
1

Für den nächsten $ (user_searchengine) Benutzer, der dies findet:

Einfache Regeln wie die BAM sehen folgendermaßen aus:
OFFSET TYPE [OPERAND]FLAG MESSAGE
Im Fall von BAM:
0 string BAM\1 BAM
Dies würde die Zeichenfolge BAM drucken, wenn der Header gefunden wird.

Für weitere Informationen scheinen diese IBM Site- Informationen etwas veraltet zu sein, sollten jedoch für einfache Anwendungsfälle ausreichen. Mann hat auch eine Reihe von Informationen über das Format.

SleepProgger
quelle
0

Sie müssen die -mOption nicht immer verwenden . Da documentend in seiner Manpage file(1)auch standardmäßig die ~/.magicDatei (oder eine kompilierte Version davon :) liest ~/.magic.mgc, können Sie dort Ihre Definitionen hinzufügen. keine Notwendigkeit, mit dem systemweiten /usr/share/magic*oder zu spielen /etc/magic.

Mosvy
quelle