Menü

Zahlen, bitte! Tote Rinder und andere magische Zahlen

Rindfleisch, Kaffee, Kuchen und verdorbenes Essen haben schon längst den Weg vom Nerd-Speiseplan in Betriebssysteme und Anwendungen gefunden – in Form von Magic Numbers. Doch wozu braucht man die eigentlich?

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 102 Beiträge
Von

Zahlen, bitte!

In dieser Rubrik stellen wir immer dienstags verblüffende, beeindruckende, informative und witzige Zahlen aus den Bereichen IT, Wissenschaft, Kunst, Wirtschaft, Politik und natürlich der Mathematik vor.

mehr anzeigen

An der Zahl 3.735.928.559 ist auf den ersten Blick nichts besonders, außer vielleicht ihre sperrige Primfaktorzerlegung: 11 × 257 × 1321517. Erst bei Darstellung als hexadezimale Zahl 0xDEADBEEF liest man darin "dead beef" oder "totes Rindfleisch".

Solche "magischen Zahlen" haben in der Programmierung verschiedene Aufgaben. Sie dienen beispielsweise als auffällige Signalwörter in (Netzwerk-)Protokollen, als Hilfsmittel zur Analyse von Speicherauszügen (Hexdumps) oder zur Kennzeichnung von Dateiformaten. Da Speicherauszüge traditionell (auch) im Hexadezimalsystem dargestellt werden, bieten sich Zahlen an, die in dieser Schreibweise herausstechen und nicht zufällig auftreten können.

Das oben genannte 0xDEADBEEF ist ein schon aus Amiga-Zeiten bekannter Klassiker. Dort wurde vom Debugger Mungwall nicht zugewiesener Speicher damit gefüllt. Zugriffe darauf führten zum sofortigen Crash (wobei damals eigentlich nur wichtig war, dass die Zahl ungerade war).

Bei der Schöpfung solcher Magic Numbers trifft das eingeschränkte Alphabet des hexadezimalen Systems auf die Kreativität der Programmierer, die fehlende Buchstaben durch Zahlen ersetzen, etwa 0 für O, 1 für L, 5 für S, 7 für T, ... – die Geburtsstunde von Hexspeak (als Vorläufer von Leetspeak).

0x0DEFACED: "defaced"
ehemalige Gastsignatur von Linux in Microsofts Hyper-V

0xCAFEBABE / 0xCAFED00D: "cafe babe / cafe dude"
kompilierte respektive mit Pack200 komprimierte Java-Klassen

0x8BADF00D: "ate bad food"
Exception Code in iOS Crash Reports, falls Apps zu lange beim Start oder Beenden brauchen

0xBEEFCACE: "beef cake"
magische Zahl in Ressource-Dateien von Microsoft .NET

0xDEADC0DE: "dead code"
Marker in der OpenWRT-Routerfirmware

0xDEADFA11: "deadfall"
Exception Code in iOS Crash Reports bei erzwungenem Beenden von Apps

0xDEFEC8ED: "defecated"
Kennzeichnung für Core Dumps bei Open Solaris

0xFEE1DEAD: "feel dead"
Signal für einen Linux-Reboot

Eine (für Microsoft) unrühmliche Anekdote am Rande: Der ursprüngliche Wert für die Linux-Gastsignatur bei Hyper-V lautete 0xB16B00B5, welches sich mit zusammengekniffenen Augen oder Kenntnis von Leetspeak als "big boobs" (große Brüste) entziffern ließ. Nach Protesten aus der (Linux-)Community wurde der Wert unleserlich gemacht (defaced).

Bei den meisten Magic-Debug-Werten handelt es sich um 32-Bit-Worte (8 Hexadezimalziffern), es gibt aber durchaus auch 48 bittige (0xBADBADBADBAD) und zunehmend mehr 64-Bit-Worte wie 0xBADC0FFEE0DDF00D ("bad coffee odd food") für nicht initialisierte CPU-Register bei IBMs RS/6000-Systemen.

Längst nicht alle Magic Numbers lassen sich direkt im Hexdump lesen, dazu wäre auch der mögliche Wortschatz zu eingeschränkt und unnötig kryptisch. Stattdessen enthalten Dateien häufig Werte, die sich als ASCII lesen lassen. Die meisten GIF-Dateien beginnen beispielsweise mit 0x474946383961, was in ASCII-Darstellung "GIF89a" ergibt.

Dateiformate lassen sich daher von Programmen und Betriebssystemen nicht nur über ihre Dateiendung identifizieren, sondern durch typische enthaltene Zeichenfolgen (Signaturen) in den Datei-Headern oder im Datenstrom selbst:

Typische Ansicht eines Hex-Editors: Links sind die hexdezimalen Zahlen als Oktette dargestellt, rechts deren ASCII-Übersetzung. Die markierten Bytes zeigen das Videoformat MPEG-4 AVC (H.264) an.

Unter Unix lässt sich mit dem file-Kommando der Typ einer Datei herausfinden; die Übersetzungstabelle für diese magischen Muster steckt passenderweise in einer Datei namens magic. Unter Windows gibt es beispielsweise das Tool TrID, das solche Signaturen analysiert:

Datei ohne Endung? Auch unter Windows muss man dann keinen Hex-Editor bemühen: TrID gibt eine Prognose für den Dateityp ab.

Dateirettungstools wie PhotoRec nutzen diese Signaturen beispielsweise, um auf kaputten Dateisystemen Datei(typen) zu identifizieren und Inhalte zu restaurieren. (vza)