Seit die erste Person 5318008 auf einem Taschenrechner geschrieben hat, haben Nerds geheime Zahlen in Ihrem PC versteckt und verwenden sie, um geheime Handshakes zwischen Anwendungen und Dateien auszuhandeln. Heute werfen wir einen kurzen Blick auf einige der unterhaltsameren Beispiele.
Was sind magische Zahlen?
Die meisten Programmiersprachen verwenden einen 32-Bit-Integer-Typ, um bestimmte Datentypen hinter den Kulissen darzustellen – intern wird die Zahl im RAM gespeichert oder von der CPU als 32 Einsen und Nullen verwendet, aber im Quellcode würde sie in beiden geschrieben reguläres Dezimalformat oder als Hexadezimalformat, das die Zahlen 0 bis 9 und die Buchstaben A bis F verwendet.
Wenn das Betriebssystem oder eine Anwendung den Dateityp ermitteln möchte, kann es am Anfang der Datei nach einer speziellen Markierung suchen, die den Dateityp angibt. Zum Beispiel könnte eine PDF-Datei mit dem Hex-Wert 0x255044462D312E33 beginnen, was im ASCII-Format „%PDF-1.3“ entspricht, oder eine ZIP-Datei mit 0x504B, was „PK“ entspricht, das vom ursprünglichen PKZip-Dienstprogramm abstammt. Anhand dieser „Signatur“ kann ein Dateityp auch ohne weitere Metadaten leicht identifiziert werden.
Kompilierte Java-Class-Dateien beginnen mit CAFEBABE
Das Linux-Dienstprogramm „Datei“ kann vom Terminal aus verwendet werden, um den Typ einer Datei zu bestimmen – tatsächlich ist es liest die magischen Zahlen aus einer Datei «Magie» genannt.
Wenn eine Anwendung eine Funktion aufrufen möchte, kann sie dieser Funktion mithilfe von Standardtypen wie Integer Werte übergeben, die im Quellcode im hexadezimalen Format ausgedrückt werden können. Dies gilt insbesondere für Konstanten, bei denen es sich um Bezeichner handelt, die mit menschenlesbaren Namen wie AUTOSAVE_INTERVAL definiert sind, aber auf tatsächliche Integer-Werte (oder einen anderen Typ) abgebildet werden. Anstatt also, dass ein Programmierer bei jedem Aufruf der Funktion im Quellcode einen Wert wie 60 eintippt, könnte er zur besseren Lesbarkeit die Konstante AUTOSAVE_INTERVAL verwenden. (Konstanten sind normalerweise leicht zu erkennen, weil sie in Großbuchstaben geschrieben sind).
Alle diese Beispiele können unter den Begriff fallen Magische Zahlen, weil sie möglicherweise eine bestimmte hexadezimale Zahl benötigen, damit eine Funktion oder ein Dateityp richtig funktioniert … wenn der Wert nicht korrekt ist, funktioniert es nicht. Und wenn ein Programmierer ein bisschen Spaß haben möchte, kann er diese Werte mit hexadezimalen Zahlen definieren, die etwas auf Englisch buchstabieren, auch bekannt als Hexspeak.
Spaß mit magischen Zahlen: Einige bemerkenswerte Beispiele
Jedes AppleScript endet mit FADEDEAD
Wenn du kurz nachschaust in den Linux-Quellcode, sehen Sie, dass der Systemaufruf _reboot() unter Linux die Übergabe einer „magischen“ Variablen erfordert, die der hexadezimalen Zahl 0xfee1dead entspricht. Wenn etwas versucht würde, diese Funktion aufzurufen, ohne zuerst diesen magischen Wert zu übergeben, würde es nur einen Fehler zurückgeben.
Die GUID (Global Unique Identifier) für a BIOS-Bootpartition im GPT-Partitionierungsschema ist 21686148-6449-6E6F-744E-656564454649, die den ASCII-String «Hah!IdontNeedEFI» bildet, eine Anspielung darauf, dass GPT normalerweise in Computern verwendet wird, die das BIOS durch UEFI ersetzt haben, aber es tut es nicht muss nicht unbedingt sein.
Microsoft bekannt versteckt 0x0B00B135 in ihrer virtuellen Hyper-V-Maschine, die den an Linux übermittelten Quellcode unterstützt, dann sie haben den Wert auf 0xB16B00B5 geändert, und schließlich sie auf Dezimal umgestellt bevor es vollständig aus dem Quellcode entfernt wurde.
Weitere lustige Beispiele sind:
- 0xbaaaaaad – verwendet von iOS-Absturzprotokollierung um anzuzeigen, dass ein Protokoll ein Stackshot des gesamten Systems ist.
- 0xbad22222 – Wird von der iOS-Absturzprotokollierung verwendet, um anzuzeigen, dass eine VoIP-App von iOS beendet wurde, weil sie sich schlecht benommen hat.
- 0x8badf00d – (Ate Bad Food) wird von iOS-Absturzprotokollen verwendet, um anzuzeigen, dass eine Anwendung zu lange dauerte, um etwas zu tun, und durch das Watchdog-Timeout beendet wurde.
- 0xdeadfa11 – (Dead Fall) wird von der iOS-Absturzprotokollierung verwendet, wenn eine App von einem Benutzer erzwungen wurde.
- 0xDEADD00D – wird von Android verwendet, um einen VM-Abbruch anzuzeigen.
- 0xDEAD10CC (Dead Lock) wird von der iOS-Absturzprotokollierung verwendet, wenn eine Anwendung eine Ressource im Hintergrund sperrt.
- 0xBAADF00D (Bad Food) verwendet von der LocalAlloc Funktion in Windows zum Debuggen.
- 0xCAFED00D (Cafe dude) wird von Javas pack200-Komprimierung verwendet.
- 0xCAFEBABE (Cafe Babe) wird von Java als Bezeichner für kompilierte Klassendateien verwendet
- 0x0D15EA5E (Krankheit) verwendet von Nintendo auf dem Gamecube und Wii um anzuzeigen, dass ein normaler Bootvorgang stattgefunden hat.
- 0x1BADB002 (1 Bad Boot) verwendet von der Multiboot Angabe als magische Zahl
- 0xDEADDEAD – wird von Windows verwendet, um a . anzuzeigen manuell initiierter Debug-Absturz, auch bekannt als Blue Screen of Death.
Dies sind natürlich nicht die einzigen da draußen, sondern nur eine kurze Liste von Beispielen, die Spaß gemacht haben. Kennen Sie noch mehr? Sag es uns in den Kommentaren.
Beispiele für sich selbst sehen
Sie können weitere Beispiele sehen, indem Sie einen Hex-Editor öffnen und dann eine beliebige Anzahl von Dateitypen öffnen. Es gibt viele Freeware-Hex-Editoren für Windows, OS X oder Linux – stellen Sie nur sicher, dass Sie bei der Installation von Freeware vorsichtig sind, um sich nicht mit Crapware oder Spyware zu infizieren.
Als zusätzliches Beispiel beginnen Wiederherstellungsbilder für Android-Handys wie ClockworkMod mit „ANDROID!“. wenn im ASCII-Format gelesen.
Verändere nichts, während du dich umsiehst. Hex-Editoren können Dinge zerstören!