de.phhsnews.com


de.phhsnews.com / Magic Numbers: Die geheimen Codes, die Programmierer auf Ihrem PC verstecken

Magic Numbers: Die geheimen Codes, die Programmierer auf Ihrem PC verstecken


Seit die erste Person 5318008 auf einem Taschenrechner geschrieben hat, verstecken Nerds geheime Zahlen in Ihrem PC und benutzen sie Aushandeln geheimer Handshakes zwischen Anwendungen und Dateien. Heute werfen wir einen Blick auf einige der unterhaltsameren Beispiele.

Was sind magische Zahlen?

Die meisten Programmiersprachen verwenden einen 32-Bit Integer-Typ, um bestimmte Arten von Daten hinter den Kulissen darzustellen - intern wird die Nummer gespeichert im RAM oder von der CPU als 32 Einsen und Nullen verwendet, aber im Quellcode würde es entweder im regulären Dezimalformat oder als hexadezimales Format geschrieben werden, das die Zahlen 0 bis 9 und die Buchstaben A bis F verwendet.

Wenn das Betriebssystem oder eine Anwendung den Typ einer Datei ermitteln möchte, kann sie den Anfang der Datei nach einem speziellen Marker durchsuchen, der den Typ der Datei angibt. Beispielsweise kann eine PDF-Datei mit dem Hexadezimalwert 0x255044462D312E33 beginnen, was "% PDF-1.3" im ASCII-Format entspricht, oder eine ZIP-Datei beginnt mit 0x504B, was "PK" entspricht und vom ursprünglichen PKZip-Dienstprogramm abstammt. Durch Betrachten dieser "Signatur" kann ein Dateityp auch ohne weitere Metadaten leicht identifiziert werden.

Kompilierte Java-Class-Dateien beginnen mit CAFEBABE

Das Linux-Dienstprogramm "file" kann vom Terminal aus verwendet werden, um den Typ zu bestimmen einer Datei - tatsächlich liest sie die magischen Zahlen aus einer Datei namens "magic".

Wenn eine Anwendung eine Funktion aufrufen möchte, kann sie Werte an diese Funktion übergeben, indem sie Standardtypen wie Ganzzahl verwendet, die in ausgedrückt werden können der Quellcode im hexadezimalen Format. Dies gilt insbesondere für Konstanten, bei denen es sich um Bezeichner handelt, die mit für Menschen lesbaren Namen wie AUTOSAVE_INTERVAL definiert sind, aber sie werden tatsächlichen Ganzzahlwerten (oder anderen Typen) zugeordnet. Anstelle eines Programmierers, der jedes Mal, wenn er die Funktion im Quellcode aufruft, einen Wert wie 60 eingibt, könnte er die AUTOSAVE_INTERVAL-Konstante für eine bessere Lesbarkeit verwenden. (Konstanten werden normalerweise leicht erkannt, da sie in Großbuchstaben geschrieben sind.)

Alle diese Beispiele können unter dem Begriff "Magische Zahlen" fallen, da sie möglicherweise eine bestimmte Hexadezimalzahl benötigen, damit eine Funktion oder ein Dateityp ordnungsgemäß funktioniert ... wenn der Wert nicht korrekt ist, wird es nicht funktionieren. Und wenn ein Programmierer ein wenig Spaß haben möchte, könnte er diese Werte mit hexadezimalen Zahlen definieren, die etwas in Englisch buchstabieren, auch bekannt als Hexspeak.

Spaß mit magischen Zahlen: Einige bemerkenswerte Beispiele

Jedes AppleScript endet mit FADEDEAD

Wenn Sie einen kurzen Blick auf den Linux-Quellcode werfen, sehen Sie, dass der Systemaufruf _reboot () unter Linux eine "magische" Variable benötigt, die der Hexadezimalzahl 0xfee1dead entspricht. Wenn etwas versucht hat, diese Funktion aufzurufen, ohne zuerst diesen magischen Wert zu übergeben, würde es nur einen Fehler zurückgeben.

Die GUID (global eindeutige Kennung) für eine BIOS-Boot-Partition im GPT-Partitionierungsschema ist 21686148-6449-6E6F-744E -656564454649, die die ASCII-Zeichenkette "Hah! IdontNeedEFI" bildet, eine Anspielung auf die Tatsache, dass GPT normalerweise in Computern verwendet wird, die das BIOS durch UEFI ersetzen, aber das muss nicht unbedingt sein.

Microsoft hat 0x0B00B135 versteckt In ihrem Hyper-V-Virtual-Machine-Quellcode, der an Linux gesendet wurde, änderten sie den Wert in 0xB16B00B5 und schließlich wechselten sie ihn in Dezimal, bevor er vollständig aus dem Quellcode entfernt wurde.

Weitere Spaßbeispiele sind:

  • 0xbaaaaaad - wird von der iOS-Absturzprotokollierung verwendet, 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 aufgrund eines Fehlverhaltens beendet wurde.
  • 0x8badf00d - (Ate Bad Food) von iOS Crash verwendet l Zeigt an, dass eine Anwendung zu lange gedauert hat und durch das Watchdog-Timeout getötet wurde.
  • 0xdeadfa11 - (Dead Fall) wird von iOS-Crashprotokollierung verwendet, wenn eine Anwendung durch einen Benutzer beendet wird.
  • 0xDEADD00D - used durch Android, 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) wird von der LocalAlloc-Funktion in Windows zum Debuggen verwendet.
  • 0xCAFED00D (Cafe dude) wird von Java verwendet compression.
  • 0xCAFEBABE (Cafe babe) wird von Java als Bezeichner für kompilierte Klassendateien
  • 0x0D15EA5E (Disease) verwendet, die von Nintendo auf dem Gamecube und Wii verwendet wurden, um einen normalen Bootvorgang anzuzeigen.
  • 0x1BADB002 (1 bad boot ) verwendet von der Multiboot-Spezifikation als magische Zahl
  • 0xDEADDEAD - wird von Windows verwendet, um auf einen manuell initiierten Debug-Absturz hinzuweisen, auch bekannt als Blue Screen of Death.

Dies sind natürlich nicht die einzigen , aber nur eine kurze Liste von Beispielen, die Spaß machten. Kennen Sie noch mehr? Sagen Sie uns in den Kommentaren.

Beispiele für sich selbst sehen

Sie können mehr 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 - achten Sie jedoch darauf, dass Sie bei der Installation von Freeware vorsichtig sind, um nicht mit Crapware oder Spyware infiziert zu werden.

Als zusätzliches Beispiel Wiederherstellungsbilder für Android-Handys wie ClockworkMod Beginnen Sie mit "ANDROID!", wenn Sie im ASCII-Format gelesen werden.

Hinweis: Ändern Sie nichts, während Sie sich umsehen. Hex-Editoren können Dinge brechen!


So stellen Sie automatische Ruhezeiten in Android mit

So stellen Sie automatische Ruhezeiten in Android mit "Nicht stören" ein

Der Modus "Nicht stören" auf Android kann nützlich sein, wenn Sie in einem Meeting, in einem Film oder an einem anderen Ort sind Das Telefon muss für eine Weile keine Ablenkung sein, aber der wahre Wert findet sich in den automatischen Regeln von Do Not Disturb. Grundsätzlich kannst du Android sagen, wenn es dich nicht stört - wie zum Beispiel nachts, während du schläfst - sowie wer dich stören kann, wenn er muss.

(how-to)

So installieren und verwenden Sie ein Desktop-Dock im Mac OS X-Stil in Ubuntu 14.04

So installieren und verwenden Sie ein Desktop-Dock im Mac OS X-Stil in Ubuntu 14.04

Haben Sie von Mac auf Linux gewechselt und den Launcher im Mac OS X-Stil verloren? Oder vielleicht möchten Sie nur ein anderes Dock als den Unity Launcher auf Ihrem Linux-Rechner. Cairo-Dock ist ein anpassbares Dock, das Sie zu Ihrem Linux-Desktop hinzufügen können. HINWEIS: Wenn wir in diesem Artikel etwas eingeben und den Text in Anführungszeichen setzen, geben Sie die Anführungszeichen NICHT ein, es sei denn, wir geben etwas anderes vor.

(how-to)