Domovská » jak » Kouzelné čísla Tajné kódy, které programátoři skryjí v počítači

    Kouzelné čísla Tajné kódy, které programátoři skryjí v počítači

    Od té doby, co první osoba napsala na počítačích číslo 5318008, hlupáci skryli tajná čísla uvnitř vašeho počítače a používali je k vyjednávání tajných handshakes mezi aplikacemi a soubory. Dnes se rychle podíváme na některé z nejvíce zábavných příkladů.

    Co jsou čarovné čísla?

    Většina programovacích jazyků používá 32bitový celočíselný typ, který reprezentuje určité typy dat v zákulisí - interně je číslo uloženo v paměti RAM nebo používá CPU jako 32 a nuly, ale ve zdrojovém kódu by bylo zapsáno buď normálním desítkovým formátem nebo jako hexadecimální formát, který používá čísla 0 až 9 a písmena A až F.

    Když operační systém nebo aplikace chce určit typ souboru, může se podívat na začátek souboru pro speciální značku, která označuje typ souboru. Například soubor PDF může začínat hexadecimální hodnotou 0x255044462D312E33, která se rovná "% PDF-1.3" ve formátu ASCII nebo ZIP soubor začíná 0x504B, což se rovná "PK", který sestupuje z původního nástroje PKZip. Podíváme-li se na tento "podpis", lze snadno identifikovat typ souboru i bez dalších metadat.

    Kompilované soubory třídy Java začínají CAFEBABEM

    Pomůcku Linux "soubor" lze použít z terminálu k určení typu souboru - ve skutečnosti čte magické čísla ze souboru s názvem "magic".

    Když aplikace chce volat funkci, může předat hodnoty této funkci pomocí standardních typů jako celé číslo, které mohou být vyjádřeny ve zdrojovém kódu v hexadecimálním formátu. Platí to zejména pro konstanty, které jsou identifikátory definované lidskými čitelnými názvy jako AUTOSAVE_INTERVAL, ale mapují na skutečné hodnoty celočíselného (nebo jiného typu). Takže namísto programátora, který vypisuje hodnotu 60, pokaždé, když volá funkci ve zdrojovém kódu, mohou pro lepší čitelnost použít konstantu AUTOSAVE_INTERVAL. (Konstanty jsou obvykle snadno rozpoznány, protože jsou psány velkými písmeny).

    Všechny tyto příklady mohou spadat pod termín Magic Numbers, protože mohou vyžadovat specifické hexadecimální číslo, aby funkce nebo typ souboru fungoval správně ... pokud hodnota není správná, nebude fungovat. A když programátor chce mít trochu zábavy, mohli by tyto hodnoty definovat pomocí šestnáctkových čísel, které vyslovují něco v angličtině, jinak známé jako hexspeak.

    Zábava s kouzelnými čísly: některé pozoruhodné příklady

    Každý AppleScript končí FADEDEAD

    Pokud se podíváte rychle na zdrojový kód systému Linux, zjistíte, že volání systému _reboot () v systému Linux vyžaduje předání proměnné "magické", která se rovná hexadecimálnímu číslu 0xfee1dead. Pokud se něco pokouší volat tuto funkci bez toho, aby nejprve prošla touto magickou hodnotou, vrátí se pouze chyba.

    GUID (globálně jedinečný identifikátor) pro zaváděcí oddíl BIOS v schématu rozdělení GPT je 21686148-6449-6E6F-744E-656564454649, který tvoří řetězec ASCII "Hah! IdontNeedEFI", narážka na skutečnost, že GPT by se běžně používal v počítačích, které nahradily systém BIOS systémem UEFI, ale nutně nemusí být.

    Microsoft skvěle ukryl 0x0B00B135 ve svém zdrojovém kódu podporujícího virtuální stroj Hyper-V, který byl předán do Linuxu, pak změnili hodnotu na 0xB16B00B5 a nakonec ji přepnuli na desítkovou plochu ještě předtím, než byla úplně odstraněna ze zdrojového kódu.

    Mezi další zábavné příklady patří:

    • 0xbaaaaaad - používá protokol havárie iOS, který označuje, že protokol je stack of the whole system.
    • 0xbad22222 - použito protokolováním selhání iOS, které naznačuje, že aplikace VoIP byla zabita nástrojem iOS, protože byla chybně.
    • 0x8badf00d - (Ate Bad Food), který používá protokoly havárie systému iOS, což naznačuje, že aplikace trvala příliš dlouho, než něco udělala, a byl zabit časovým limitem watchdog.
    • 0xdeadfa11 - (Dead Fall) používaný protokolem při selhání iOS, když je aplikace přerušena uživatelem.
    • 0xDEADD00D - používaný systémem Android, který označuje přerušení VM.
    • 0xDEAD10CC (Dead Lock) používaný protokolováním selhání iOS, když aplikace uzamkne prostředek na pozadí.
    • 0xBAADF00D (špatné jídlo), které používá funkce LocalAlloc v systému Windows pro ladění.
    • 0xCAFED00D (Cafe dude) použitý kompresí pack200 v Javě.
    • 0xCAFEBABE (Cafe babe) používané Java jako identifikátor pro kompilované soubory třídy
    • 0x0D15EA5E (Nemoci) používané Nintendo na Gamecube a Wii ukázat normální boot se stalo.
    • 0x1BADB002 (1 špatný start) používaný specifikací pro spouštění jako kouzelné číslo
    • 0xDEADDEAD - používaný systémem Windows k označení ručně spouštěné chyby, jinak známá jako modrá obrazovka smrti.

    Nejsou to samozřejmě jediné, samozřejmě, ale jen krátký seznam příkladů, které vypadaly zábavně. Už víte? Řekni nám v komentáři.

    Vidět příklady pro sebe

    Další příklady můžete zobrazit otevřením hex editoru a otevřením libovolného počtu typů souborů. Existuje spousta freeware hex editorů pro Windows, OS X nebo Linux - jen se ujistěte, že jste opatrní při instalaci freewaru, abyste se neinfikovali s crapware nebo spywarem.

    Dalším příkladem je, že obnovení obrázků pro telefony Android, jako je ClockworkMod, začíná "ANDROID!", Pokud je ve formátu ASCII.

    Poznámka: nezměňujte nic, když se rozhlížíte. Hex editoři mohou rozdělit věci!