Koduleht » kuidas » Magic-numbrid Salajakoodid, mida programmeerijad teie arvutis peidavad

    Magic-numbrid Salajakoodid, mida programmeerijad teie arvutis peidavad

    Alates sellest, kui esimene inimene tegi kalkulaatorile 5318008, kirjutas neerud salajased arvud teie arvuti sisemusse ja kasutasid neid salajaste käepigistuste pidamiseks rakenduste ja failide vahel. Täna vaatame kiiresti mõningaid meelelahutuslikke näiteid.

    Mis on Magic Numbers?

    Enamik programmeerimiskeeleid kasutavad 32-bitist täisarvu, et esindada teatud tüüpi andmeid stseenide taga - sisemiselt salvestatakse number RAM-is või CPU kasutab seda 32-kujulisena ja nullidena, kuid lähtekoodis oleks see kirjutatud kas tavaline kümnendvorming või kuueteistkümnendvorming, mis kasutab numbreid 0 kuni 9 ja tähti A kuni F.

    Kui operatsioonisüsteem või rakendus soovib faili tüübi kindlaks määrata, võib ta otsida faili algusesse spetsiaalse markeri, mis tähistab faili tüüpi. Näiteks võib PDF-fail alustada heksaväärtusega 0x255044462D312E33, mis võrdub “% PDF-1.3” ASCII-vormingus või ZIP-fail algab 0x504B-ga, mis võrdub “PK” -ga, mis langeb algsest PKZip-utiliidist. Seda allkirja vaadates saab failitüübi kergesti tuvastada ka ilma muude metaandmeteta.

    Koostatud Java-klassi failid algavad CAFEBABE-ga

    Linuxi utiliidi “fail” saab terminali abil kasutada faili tüübi kindlaksmääramiseks - tegelikult loeb see maagilisi numbreid failist nimega „maagia”.

    Kui rakendus soovib funktsiooni helistada, saab ta sellele funktsioonile väärtusi edastada, kasutades standardseid tüüpe, nagu täisarv, mida saab väljendada lähtekoodis kuueteistkümnendsüsteemis. Eriti kehtib see konstantide kohta, mis on inimese loetavate nimedega nagu AUTOSAVE_INTERVAL määratletud identifikaatorid, kuid need kaardistatakse tegelike täisarvude (või muude tüüpide) väärtustega. Nii et programmeerija asemel, kes kirjutab välja väärtuse nagu 60 iga kord, kui nad lähtekoodi funktsiooni nimetavad, võiksid nad kasutada paremat loetavust kasutades AUTOSAVE_INTERVAL konstanti. (Konstantid on tavaliselt kergesti äratuntavad, sest need on kirjutatud kõigis suurtähtedes).

    Kõik need näited võivad kuuluda termini "Magic Numbers" alla, sest need võivad vajada spetsiifilist kuueteistkümnendnumbrit, et funktsioon või failitüüp toimiks korralikult ... kui väärtus ei ole õige, siis see ei toimi. Ja kui programmeerija soovib natuke lõbusaks jääda, võivad nad need väärtused määratleda heksadecimaalsete numbrite abil, mis kirjutavad midagi inglise keeles, muidu tuntud kui heksikõne.

    Lõbus maagiliste numbritega: mõned märkimisväärsed näited

    Iga AppleScript lõpeb FADEDEADiga

    Kui te vaatate Linuxi lähtekoodi kiiresti, näete, et Linuxi süsteemikõne _reboot () nõuab "magic" muutujat, mis on võrdne heksadecimaalse numbriga 0xfee1dead. Kui midagi püüdis seda funktsiooni helistada, ilma et see maagiline väärtus oleks kõigepealt läbinud, siis lihtsalt tagastaks see vea.

    GPT jaotusskeemi BIOS-i boot partitsiooni GUID (globaalselt unikaalne identifikaator) on 21686148-6449-6E6F-744E-656564454649, mis moodustab ASCII stringi „Hah! IdontNeedEFI”, mis viitab sellele, et GPT-d kasutatakse tavaliselt arvutites, mis asendasid BIOSi UEFI-ga, kuid see ei pea tingimata olema.

    Microsoft pälvis suurepäraselt oma Linuxile edastatud Hyper-V virtuaalmasina toetuskoodi 0x0B00B135, seejärel muutsid need väärtuseks 0xB16B00B5 ja lõpuks vahetasid nad kümnendkohani enne, kui see algkoodist täielikult eemaldati.

    Rohkem lõbusaid näiteid on:

    • 0xbaaaaaad - mida kasutab iOS crash logging, et näidata, et log on kogu süsteemi stackhot.
    • 0xbad22222 - mida kasutab iOS crash logging, et näidata, et iOS on surnud VoIP-rakenduse, kuna see on valesti salvestatud.
    • 0x8badf00d - (Ate Bad Food), mida iOS-i krahhi logid kasutavad, et näidata, et rakendus võttis liiga kaua aega, et seda teha ja tapeti valvekohti.
    • 0xdeadfa11 - (Dead Fall), mida kasutab iOS-i krahhi logimine, kui rakendus on kasutaja poolt lõpetatud..
    • 0xDEADD00D - mida Android kasutab VM-i katkestamiseks.
    • 0xDEAD10CC (Dead Lock), mida kasutab iOS-krahhi logimine, kui rakendus lukustab ressursse taustal.
    • 0xBAADF00D (Bad Food), mida kasutab Windowsi LocalAlloc-funktsioon silumine.
    • 0xCAFED00D (Cafe dude), mida kasutab Java pack200 pakkimine.
    • 0xCAFEBABE (Cafe babe), mida Java kasutab kompileeritud klassifailide identifikaatorina
    • 0x0D15EA5E (haigus), mida Nintendo kasutas Gamecube'is ja Wii, et näidata normaalset käivitust.
    • 0x1BADB002 (1 halb alglaadimine), mida multiboot spetsifikatsioon kasutab maagilise numbrina
    • 0xDEADDEAD - mida Windows kasutab, et näidata käsitsi algatatud silumisõnnetust, mis on muidu tuntud kui sinine surmakraan.

    Need ei ole loomulikult ainsad, vaid vaid lühike loetelu näidetest, mis tundusid lõbusad. Kas rohkem teada? Räägi meile kommentaarides.

    Näiteid iseendale

    Näete rohkem näiteid, kui avate hex-redaktori ja avate suvalise arvu failitüüpe. Windowsile, OS X-le või Linuxile on saadaval palju vabatarkvara hex-toimetajaid - veenduge, et olete freeware installimisel ettevaatlik, et mitte nakatada crapware'i või nuhkvara.

    Täiendava näitena algavad taastekuvad Android-telefonidele, nagu ClockworkMod, „ANDROID!”, Kui neid loetakse ASCII-vormingus.

    Märge: ärge muutke midagi, kui te ringi vaatate. Hex-toimetajad võivad asju murda!