Pagrindinis » kaip » „Magic“ numeriai „Secret Codes“, kuriuos užprogramuoja programuotojas

    „Magic“ numeriai „Secret Codes“, kuriuos užprogramuoja programuotojas

    Nuo to laiko, kai pirmasis asmuo užrašė 5318008 skaičiuoklę, nerds paslėpė slaptus numerius jūsų kompiuterio viduje ir naudodamiesi jais derėjosi dėl slaptų rankų paspaudimų tarp programų ir failų. Šiandien mes greitai žvelgiame į kai kuriuos įdomesnius pavyzdžius.

    Kas yra Magic numeriai?

    Dauguma programavimo kalbų naudoja 32 bitų sveikojo skaičiaus tipą tam, kad atspindėtų tam tikrus duomenų tipus užkulisiuose - viduje šis numeris yra saugomas RAM arba CPU naudoja kaip 32 ir nuliai, tačiau šaltinio kode jis būtų parašytas reguliarus dešimtainis formatas, arba kaip šešioliktainis formatas, kuriame naudojami skaičiai nuo 0 iki 9 ir raidės nuo A iki F.

    Kai operacinė sistema arba programa nori nustatyti failo tipą, ji gali ieškoti failo pradžios tam tikram žymeniui, kuris reiškia failo tipą. Pvz., PDF failas gali prasidėti nuo hexx vertės 0x255044462D312E33, kuris lygus „% PDF-1.3“ ASCII formatu, arba ZIP failas prasideda nuo 0x504B, kuris lygus „PK“, kuris nusileidžia iš originalios PKZip programos. Žiūrėdami šį „parašą“, failo tipą galima lengvai identifikuoti net ir be kitų metaduomenų.

    Sudaryti Java klasės failai prasideda CAFEBABE

    „Linux“ programos „failas“ gali būti naudojamas iš terminalo failo tipui nustatyti - iš tikrųjų jis skaito magijos numerius iš failo, pavadinto „magija“.

    Kai programa nori skambinti funkcijai, ji gali perduoti vertes į šią funkciją, naudodama standartinius tipus, tokius kaip sveikasis skaičius, kuris gali būti išreikštas pradiniu kodu šešioliktainiu formatu. Tai ypač pasakytina apie konstantas, kurios yra identifikatoriai, apibrėžti žmogaus skaitymo pavadinimais, pvz., AUTOSAVE_INTERVAL, tačiau jie susiejami su faktinėmis sveikojo skaičiaus (ar kito tipo) reikšmėmis. Taigi vietoj programuotojo, įvesiančio tokią vertę kaip 60, kiekvieną kartą, kai jie vadina funkciją iš pradinio kodo, jie galėtų naudoti „AUTOSAVE_INTERVAL“ pastovumą, kad būtų geriau skaitoma. (Konstantos paprastai yra lengvai atpažįstamos, nes jos parašytos visomis didžiosiomis raidėmis).

    Visi šie pavyzdžiai gali patekti į „Magic Numbers“ terminą, nes jie gali reikalauti konkretaus šešioliktainio skaičiaus, kad funkcija arba failo tipas veiktų tinkamai ... jei vertė nėra teisinga, ji neveiks. Ir kai programuotojas nori šiek tiek pasilinksminti, jie gali apibrėžti šias vertes naudodamiesi šešioliktainiais skaičiais, kurie nurodo kažką anglų kalba, kitaip vadinamą šešiakampiu.

    Pramogos su magiškais numeriais: kai kurie žymūs pavyzdžiai

    Kiekvienas „AppleScript“ baigiasi FADEDEAD

    Jei greitai žiūrėsite į „Linux“ kodą, pamatysite, kad „Linux“ sistemoje „_reboot“ () reikalingas „magijos“ kintamasis, kuris yra lygus heksadeciminiam skaičiui 0xfee1dead. Jei kažkas bandė skambinti šiai funkcijai, nepradėdama pirmiausia į tą magišką vertę, ji tiesiog grąžintų klaidą.

    „GUID“ (visuotinai unikalus identifikatorius) „BIOS“ įkrovos skaidymui GPT skaidymo schemoje yra 21686148-6449-6E6F-744E-656564454649, kuris sudaro ASCII eilutę „Hah! IdontNeedEFI“. kompiuteriuose, kurie pakeitė BIOS su UEFI, tačiau nebūtinai turi būti.

    „Microsoft“ puikiai paslėpė „0x0B00B135“ savo „Hyper-V“ virtualiosios mašinos palaikančiame kode, pateiktame „Linux“, tada jie pakeitė vertę į 0xB16B00B5, ir galiausiai jie pakeitė jį iki dešimtosios, kol ji buvo visiškai pašalinta iš šaltinio kodo.

    Daugiau įdomių pavyzdžių:

    • 0xbaaaaaad - naudojamas „iOS“ avarijos registravime, nurodant, kad žurnalas yra visos sistemos stackhot.
    • 0xbad22222 - naudojamas „iOS crash logging“, nurodant, kad „iOS“ buvo nužudyta „VoIP“ programa, nes ji buvo nesugadinta.
    • 0x8badf00d - („Ate Bad Food“), kurį naudoja „iOS“ avarijos žurnalai, nurodydami, kad programa užtruko per ilgai, kad kažką atliktų ir nužudė budėjimo laiko trukmė.
    • 0xdeadfa11 - („Dead Fall“), kurį naudoja „iOS“ avarijos registravimas, kai programa yra jėgos uždarymas naudotojui.
    • 0xDEADD00D - naudojama „Android“, nurodydama „VM“ nutraukimą.
    • 0xDEAD10CC („Dead Lock“), kurį naudoja „iOS“ avarijos registravimas, kai programa užfiksuoja šaltinį fone.
    • 0xBAADF00D (blogas maistas), kurį naudoja „LocalAlloc“ funkcija „Windows“ derinant.
    • „0xCAFED00D“ („Cafe dude“), kurią naudoja „Java“ pack200 suspaudimas.
    • 0xCAFEBABE („Cafe babe“), kurią „Java“ naudoja kaip sukurtų klasės failų identifikatorių
    • 0x0D15EA5E (liga), kurią „Nintendo“ naudoja „Gamecube“, ir „Wii“, norint nurodyti įprastą įkrovą.
    • 0x1BADB002 (1 blogas įkrovimas), kurį naudoja daugiafunkcinė specifikacija kaip magijos numeris
    • 0xDEADDEAD - „Windows“ naudoja, kad parodytų rankiniu būdu inicijuotą debugo gedimą, kitaip žinomą kaip „Mėlynasis mirties ekranas“.

    Žinoma, tai nėra vieninteliai, bet tik trumpas pavyzdžių, kurie atrodė įdomūs, sąrašas. Ar žinote daugiau? Pasakykite mums komentaruose.

    Matydamas sau pavyzdžius

    Galite matyti daugiau pavyzdžių, atverdami šešioliktainį redaktorių ir atveriant bet kokį failų tipų skaičių. Yra daug nemokamų „hex“ redaktorių, skirtų „Windows“, „OS X“ ar „Linux“ versijoms - tik įsitikinkite, kad esate atsargūs diegdami nemokamą programinę įrangą, kad nebūtų užsikrėtę „crapware“ ar šnipinėjimo programomis.

    Kaip pavyzdį, atkūrimo vaizdai, skirti „Android“ telefonams, pvz., „ClockworkMod“, prasideda „ANDROID!“, Jei skaitomi ASCII formatu.

    Pastaba: nekeiskite nieko, kol žiūrite aplink. Hex redaktoriai gali nutraukti dalykus!