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