24Aug

Magic Numbers: salajased koodid, mida programmeerijad peidavad teie arvutis

Alates sellest, kui esimene inimene kirjutas välja kalkulaatorile 5318008, on nerds varjanud oma arvutisse salajasi numbreid ja kasutavad neid, et rääkida rakenduste ja failide vahel salajaste käepigistuste vahel. Täna vaatame mõnda huvitavamaid näiteid kiiresti.

Mis on Magic Numbers?

Enamik programmeerimiskeeli kasutab 32-bitise täisarvuga tüüpi, mis esindab teatud tüüpi andmeid stseenide taga - sisemiselt salvestatakse see number RAM-i või kasutab CPU 32 nimega ja nulliga, kuid lähtekoodis see kirjutatakse väljakas tavaline kümnendformaat või kuueteistkümnendvorming, mis kasutab numbreid 0 kuni 9 ja tähte A kuni F.

Kui operatsioonisüsteem või rakendus soovib faili tüüpi määrata, saab ta vaadata faili algusteriliseks markeriks, mis tähistab failitüüpi. Näiteks võib PDF-fail alata hex-väärtusega 0x255044462D312E33, mis võrdub ASCII-vormingus "% PDF-1.3" või ZIP-fail algab 0x504B-st, mis võrdub PK-ga, mis lahkub originaalsest PKZip-utiliidist. Vaadates seda "allkirja", saab failitüübi hõlpsasti tuvastada ka ilma muude metaandmeteta.

koostatud Java-klassi failid alustatakse CAFEBABE

-ga Linuxi utiliidi "fail" saab terminalist kasutada faili tüübi kindlakstegemiseks - tegelikult loeb see magic numbritega failist "magic".

Kui rakendus soovibfunktsiooni kutsumiseks võib see funktsioon sellele väärtusele edastada, kasutades standardseid tüüpe nagu täisarv, mida saab väljendada lähtekoodina kuueteistkümnendsüsteemis. See kehtib eriti konstantide kohta, mis on identifitseerijad defineeritud inimeselt loetavate nimetega nagu AUTOSAVE_INTERVAL, kuid need kaardid pärinevad tegelikest täisarvudest( või muud tüüpi väärtustest).Selle asemel, et programmeerija kirjutades väärtuse 60-ni iga kord, kui nad lähtekoodis funktsiooni nimetavad, võivad nad kasutada paremini loetavaks AUTOSAVE_INTERVAL konstandit.(Konstante on tavaliselt lihtne ära tunda, sest need on kirjutatud kõikides suurtähtedes).

Kõik need näited võivad kuuluda termini Magic Numbers alla, kuna need võivad nõuda teatud kuueteistkümnendat numbrit funktsiooni või failitüübi korralikuks toimimiseks. .. kui väärtus pole õige, see ei toimi. Kui programmeerija soovib natuke lõbusat, võivad nad neid väärtusi määratleda, kasutades heksadetsimaalisi numbreid, mis selgitavad mõnda ingliskeelset teksti, muidu tuntud kui hexspeak.

lõbus maagiliste numbritega: mõningad tähelepanuväärsed näited

Iga AppleScript lõpeb FADEDEAD

-ga Kui vaatate Linuxi lähtekoodi kiiret ülevaadet, näete, et Linuxi süsteemikõne _reboot() nõuab "magic" muutujatmis võrdub kuueteistkümnendnumbriga 0xfee1dead. Kui midagi püüdis seda funktsiooni kutsuda, ilma et see võlukoormus oleks esmalt edastatud, oleks see lihtsalt veateade.

GUID( globaalselt unikaalne identifikaator) GPT partitsioneerimisskeemi jaoks BIOS-i alglaadimispartitsiooniks on 21686148-6449-6E6F-744E-656564454649, mis moodustab ASCII stringi "Hah! IdontNeedEFI", viidates sellele, et GPT peaks tavaliselt olemamida kasutatakse arvutid, mis asendasid BIOS-i UEFI-ga, kuid see ei pruugi olla vajalik.

Microsoft viitas Linuxile saadetud lähtekoodi toetavale Hyper-V virtuaalsele masinale 0x0B00B135, seejärel muutis nad väärtuseks 0xB16B00B5 ja lõpuks lülitasid selle välja kommutaatoriks, enne kui see täielikult lähtekoodist eemaldati.

Veel lõbusamate näidete hulka kuuluvad:

  • 0xbaaaaaad - kasutatakse iOS-i krahhi logimisel, et näidata, et log on kogu süsteemi terviklahendus.
  • 0xbad22222 - kasutatakse iOS-i krahhi logimisel, et näidata, et iOS-i on hukatud VoIP-rakendus, kuna see on valesti rakendatud.
  • 0x8badf00d -( Ate Bad Food), mida kasutavad iOS-i ärrituslogid, et näidata, et rakendus võttis liiga palju aega, et seda teha, ja see tapeti valveaja ajastamise ajal.
  • 0xdeadfa11 -( Dead Fall), mida kasutaja kasutab iOS-i krahhi logimisel, kui rakendus on jõudnud lõpetada.
  • 0xDEADD00D - kasutatakse Android-is, et näidata VM-i katkestamist.
  • 0xDEAD10CC( Dead Lock), mida iOS-i krahhi logimine kasutab, kui rakendus lukustab taustal ressursi.
  • 0xBAADF00D( Bad Food), mida LocalAlloc funktsioon Windowsis kasutatakse silumiseks.
  • 0xCAFED00D( Cafe dude), mida kasutab Java pakettakast 200 kompressioon.
  • 0xCAFEBABE( Cafe babe), mida Java on kasutatud kompileeritud klassifailide identifikaatorina
  • 0x0D15EA5E( haigus), mida Nintendo kasutab Gamecube'il ja Wii'il, et näidata tavalist käivitamist.
  • 0x1BADB002( 1 pahane boot), mida kasutatakse multiboot-spetsifikatsioonina maagiaarvana
  • 0xDEADDEAD - kasutatakse Windowsis, et näidata käsitsi käivitatavat silumiskraali, muidu tuntud kui sinisel ekraanil surm.

Need ei ole muidugi ainsad, vaid ainult lühike näidete loend, mis tundus lõbus. Rohkem teada? Räägi meile kommentaarides.

Näidised iseendale

Näete rohkem näiteid, avades hex redaktori ja avab seejärel mis tahes arvu failitüüpe. Windowsi, OS Xi või Linuxi jaoks on saadaval palju tasuta hex-redaktoreid - lihtsalt veenduge, et olete ettevaatlik, kui installite vabavara, et mitte nakatuda nuhkvara või nuhkvara vastu.

Lisatud näiteks Android-telefonide taastamise pildid, nagu näiteks ClockworkMod, algavad kui "ANDROID!" Kui need on loetletud ASCII-vormingus.

Märkus: ei muuda midagi, kui vaatate ümber. Hex toimetajad saavad murda asju!