Čarobne številke Skrivne kode, ki jih programerji skrijejo v vašem računalniku
Odkar je prva oseba na kalkulatorju napisala 5318008, so piflarji skrivne številke skrivali v vašem računalniku in jih uporabili za pogajanja o tajnih rokih med aplikacijami in datotekami. Danes si lahko ogledamo nekaj bolj zabavnih primerov.
Kaj so čarobne številke?
Večina programskih jezikov uporablja 32-bitni celoštevilčni tip za predstavitev določenih tipov podatkov v ozadju - interno je število shranjeno v RAM-u ali ga uporablja CPU kot 32-krat in ničel, toda v izvorni kodi je zapisana v obeh Običajna decimalna oblika ali v šestnajstiški obliki, ki uporablja številke od 0 do 9 in črke od A do F.
Ko operacijski sistem ali aplikacija želi določiti vrsto datoteke, lahko pogleda na začetek datoteke za poseben označevalec, ki označuje tip datoteke. Datoteka PDF se lahko na primer začne s hex vrednostjo 0x255044462D312E33, ki je enaka »% PDF-1.3« v formatu ASCII, ali pa se ZIP datoteka začne z 0x504B, kar je enako »PK«, ki izvira iz izvirnega orodja PKZip. Če pogledamo ta »podpis«, lahko vrsto datoteke enostavno identificiramo tudi brez drugih metapodatkov.
Zbrane datoteke Java razreda se začnejo s CAFEBABEUporabniško datoteko Linuxa lahko uporabite iz terminala, da določite vrsto datoteke - pravzaprav bere čarobne številke iz datoteke, imenovane »magija«.
Ko aplikacija želi poklicati funkcijo, lahko posreduje vrednosti tej funkciji s standardnimi tipi, kot je celo število, ki se lahko izrazi v izvorni kodi v šestnajstiški obliki. To še posebej velja za konstante, ki so identifikatorji, definirani z berljivimi imeni, kot je AUTOSAVE_INTERVAL, vendar se preslikajo na dejanske vrednosti (ali druge vrste). Torej namesto programerja, ki pri vsakem klicu funkcije v izvorni kodi vnese vrednost, kot je 60, bi lahko uporabili konstanto AUTOSAVE_INTERVAL za boljšo berljivost. (Konstante se običajno enostavno prepoznajo, ker so zapisane z velikimi tiskanimi črkami).
Vsi ti primeri lahko spadajo pod izraz Magične številke, ker lahko zahtevajo določeno šestnajstiško število, da bi funkcija ali vrsta datoteke delovala pravilno ... če vrednost ni pravilna, ne bo delovala. In ko programer želi imeti malo zabave, lahko te vrednosti določijo s šestnajstiškimi številkami, ki v angleščini pojasnjujejo nekaj, kar je znano kot hexspeak.
Zabava z čarobnimi številkami: nekateri opazni primeri
Vsak AppleScript se konča s FADEDEADČe si hitro ogledate izvorno kodo Linuxa, boste videli, da sistemski klic _reboot () v Linuxu zahteva, da se prenese »čarobna« spremenljivka, ki je enaka šestnajstiškemu številu 0xfee1dead. Če bi nekaj poskušalo klicati to funkcijo, ne da bi najprej prešlo to čarobno vrednost, bi samo vrnila napako.
GUID (globalno edinstveni identifikator) za zagonsko particijo BIOS-a v razdelilni shemi GPT je 21686148-6449-6E6F-744E-656564454649, ki tvori niz ASCII »Hah! IdontNeedEFI«, namigovanje na dejstvo, da bi se GPT običajno uporabljal v računalnikih, ki so nadomestili BIOS z UEFI, vendar to ni nujno.
Microsoft je slavno skril 0x0B00B135 v virtualni stroj Hyper-V, ki podpira izvorno kodo, predloženo Linuxu, nato pa je spremenila vrednost na 0xB16B00B5 in končno jo spremenila v decimalko, preden je bila popolnoma odstranjena iz izvorne kode..
Več zanimivih primerov je:
- 0xbaaaaaad - uporablja se pri zapisovanju zrušitev sistema iOS in nakazuje, da je dnevnik stackshot celotnega sistema.
- 0xbad22222 - uporablja se pri zapisovanju zrušitev sistema iOS in nakazuje, da je iOS ubil aplikacijo VoIP, ker se je obnašala nepravilno.
- 0x8badf00d - (Ate Bad Food), ki ga uporabljajo iOS-i, ki označujejo, da je aplikacija predolgo naredila nekaj in da je bila uničena s časovno omejitvijo nadzornika.
- 0xdeadfa11 - (Dead Fall), ki ga iOS snema, ko je uporabnik prisiljen zapustiti uporabnik.
- 0xDEADD00D - Android uporablja za označevanje prekinitve VM.
- 0xDEAD10CC (Dead Lock), ki ga uporablja iOS crash logging, ko aplikacija zaklene vir v ozadju.
- 0xBAADF00D (Slaba hrana), ki ga uporablja funkcija LocalAlloc v sistemu Windows za odpravljanje napak.
- 0xCAFED00D (Cafe dude), ki ga Java uporablja pack200 stiskanje.
- 0xCAFEBABE (Cafe babe), ki ga Java uporablja kot identifikator za prevedene datoteke razreda
- 0x0D15EA5E (Bolezen), ki ga uporablja Nintendo na Gamecube in Wii za označevanje normalnega zagona.
- 0x1BADB002 (1 slab zagon), ki ga uporablja specifikacija za več operacijskih sistemov kot čarobno številko
- 0xDEADDEAD - ki ga Windows uporablja za označevanje ročno sproženega sesutja razhroščevanja, drugače znano kot Modri zaslon smrti.
To seveda niso edini, ampak le kratek seznam primerov, ki so se zdeli zabavni. Veš kaj več? Povejte nam v komentarjih.
Videti si primere
Več primerov lahko vidite tako, da odprete hex-urejevalnik in nato odprete poljubno število vrst datotek. Za Windows, OS X ali Linux je na voljo veliko brezplačnih šestnajstiških urejevalnikov - samo pazite, da ste previdni pri nameščanju brezplačne programske opreme, da se ne okužite s crapware ali spyware.
Kot dodaten primer, obnovitvene slike za telefone Android, kot je ClockworkMod, se začnejo z »ANDROID!«, Če se berejo v formatu ASCII..
Opomba: ne spreminjajte ničesar, medtem ko gledate okoli. Hex uredniki lahko zlomijo stvari!