linux-l: Magic Numbers

Mirko Dziadzka dziadzka at ai-lab.fh-furtwangen.de
Di Aug 5 17:29:37 CEST 1997


On Tue, Aug 05, 1997 at 03:42:09PM +0200, Oliver Bandel wrote:
> Hallo!
> 
> Ich wollte mal horchen, welche Möglichkeiten es gibt, Dateien zu
> unterscheiden / erkennen, ohne daß man dies aus dem Dateinamen ableitet,
> wie zum Besipiel über "Extensions" unter DOS.
> 
> Bei Shell-Skripten soll man ja in der ersten Zeile angeben:
> #!/usr/bin/sh
> 
> bei Tcl/Tk, wenn man wish nutzt:
> #!/usr/X11R6/bin/wish -f
> 
> Fragen: (1): Welche weiteren Kennungen gibt es / welche Programme nutzen
>              diese Kennung?
>              (Ich habe mal in binären Dateien die Eintragung "ELF"
>               gefunden und Perl soll das Konzept wohl auch nutzen.)

alle die in /etc/magic eingetragen sind -> man file/magic


>         (2): Wie kann man dieses Konzept selber sinnvoll für eigene
>              Anwendungen nutzen?

Wenn du eingene Binaries erzeugst, schreib am besten den Namen der Anwendung an eine
feste Position im Header und ergaenze /etc/magic

>         (3): Sind diese Magic-Numbers immer auf die erste Zeile
>              der jeweils gekennzeichneten Datei beschränkt? 

Nein -> siehe /etc/magic

>         (4): Wie ist so eine Kennung aufgebaut?

Beliebige Bytes an fest definierten stellen im Text

>         (5): Wieso werden bei manchen Textdateien von "file" falsche
>              Ausgaben produziert? Wie kann man eine korrekte Erkennung
>              von Textfiles oder LaTeX-Files oder anderen Files erreichen?


Weil es schwer ist, aus einer reinen ASCII-Datei ohne Magic-Numbers
zu erkennen was der Inhalt ist. Irgendwo gibt es ein File, welches in
7 verschiedenen Programmiersprachen ein gueltiges Programm darstellt -
wie soll file da entscheiden koennen, was es eigentlich ist.  Es koennen
nur Heuristiken benutzt werden, die sind allerdings nicht fehlerfrei (siehe
sourcecode von file)

>         (5): Ist eine Angabe wie "#!/usr/X11R6/bin/wish -f" bereits eine
>              "Magic Number", weil das Ausrufungszeichen eine bestimmte,
>               (die Bedeutung des Kommentarzeichens "#" aufhebende)
>               Bedeutung hat, oder sind "magic numbers" wirklich
>               Zahlenkennungen?

#! an der Position 0 ist eine Magic-number, weil es z.B. von exec speziell
behandelt wird (aufruf eines Interpreters)
Aus den folgenden Zeichen koennte ein modifiziertes file folgern,
das es sich um eine tcl/tk Anwendung handelt - ist aber meines Wissens
nicht implementiert. 

	Mirko




Mehr Informationen über die Mailingliste linux-l