If-Koubou

Magic Numbers: Tajni kodovi koji programeri sakriti u vašem računalu

Magic Numbers: Tajni kodovi koji programeri sakriti u vašem računalu (Kako da)

Otkad je prva osoba napisala 5318008 na kalkulatoru, nerds kriju tajne brojeve unutar vašeg računala i pomoću njih pregovaraju o tajnim ručnim prekidima između aplikacija i datoteka. Danas ćemo brzo pogledati neke od primamljivijih primjera.

Što su čarobni brojevi?

Većina programskih jezika koristi 32-bitni cijeli broj koji predstavlja određene vrste podataka iza scena - interno se broj pohranjuje u RAM-u ili CPU koristi kao 32 i zer, ali u izvornom kodu će biti napisan u bilo redovitog decimalnog formata ili kao heksadecimalni format koji koristi brojeve od 0 do 9 i slova A do F.

Kada operacijski sustav ili aplikacija žele odrediti vrstu datoteke, može se na početak datoteke pronaći posebni marker koji označava vrstu datoteke. Na primjer, PDF datoteka može započeti s heksadecimalnom vrijednošću 0x255044462D312E33, što je jednako "% PDF-1.3" u ASCII formatu ili ZIP datoteka počinje sa 0x504B, što je jednako "PK", koji se spušta od originalnog korisničkog programa PKZip. Gledajući ovaj "potpis", vrsta datoteke se lako može identificirati čak i bez bilo kojeg drugog metapodataka.

Sastavljene Java Class datoteke počinju s CAFEBABE

Datoteka "Linux" može se koristiti s terminala kako bi se utvrdila vrsta datoteke - u stvari, čita čarobne brojeve iz datoteke koju nazivamo "čarolija".

Kada aplikacija želi nazvati funkciju, ona može proslijediti vrijednosti za tu funkciju pomoću standardnih tipova kao što su cijeli broj, što se može izraziti u izvornom kodu u heksadecimalnom formatu. To je osobito istinito za konstante, koje su identifikatori definirani ljudskim čitljivim imenima poput AUTOSAVE_INTERVAL, no oni mapiraju stvarnu vrijednost cijele (ili druge vrste). Dakle, umjesto da programer napravi vrijednost kao što je 60 svaki put kad poziva funkciju u izvornom kodu, mogli bi koristiti konstantu AUTOSAVE_INTERVAL radi bolje čitljivosti. (Konstante su obično lako prepoznate jer su pisane svim velikim slovima).

Svi ovi primjeri mogu biti pod nazivom Magic Numbers jer mogu zahtijevati određeni heksadecimalni broj kako bi funkcija ili vrsta datoteke ispravno funkcionirale ... ako vrijednost nije ispravna, neće funkcionirati. A kad se programer želi malo zabaviti, oni bi mogli definirati te vrijednosti pomoću heksadecimalnih brojeva koji izgovaraju nešto na engleskom jeziku, inače poznat kao hexspeak.

Zabava s čarobnim brojevima: neki važni primjeri

Svaki AppleScript završava s FADEDEAD

Ako brzo pogledate Linux izvorni kod, vidjet ćete da sustav _reboot () naziva Linux zahtijeva da se prođe "čarobna" varijabla koja je jednaka heksadecimalnom broju 0xfee1dead. Ako je nešto pokušalo nazvati tu funkciju, a da prvo ne prijeđe u tu čarobnu vrijednost, to bi samo vratilo pogrešku.

GUID (globalno jedinstveni identifikator) za particiju za podizanje BIOS-a u GPT particijacijskoj shemi je 21686148-6449-6E6F-744E-656564454649, koja čini ASCII niz "Hah! IdontNeedEFI", aluzija na činjenicu da se GPT normalno koristi na računalima koja su zamijenila BIOS sa UEFI-om, ali to ne mora nužno biti.

Microsoft je poznato skrivao 0x0B00B135 u svojem Hyper-V virtualnom stroju koji podržava izvorni kod poslan na Linux, a zatim su promijenili vrijednost na 0xB16B00B5, i konačno su je prebacili na decimalni prije nego što je uklonjen iz izvornog koda zajedno.

Više zabavnih primjera uključuju:

  • 0xbaaaaaad - koristi se iOS zapisima za padove kako bi se naznačilo da je zapisnik stackshot cijelog sustava.
  • 0xbad22222 - koristi se prijavom na sudar iOS-a kako bi naznačio da je iOS poginuo VoIP aplikaciju jer je pogrešno funkcionirala.
  • 0x8badf00d - (Ate Bad Food) koji su koristili iOSovi zapisnici koji ukazuju na to da je aplikacija trebala predugo raditi i ubijena je timeoutom za nadzor.
  • 0xdeadfa11 - (Dead Fall) koji koristi zapisivanje sudara iOS-a kada korisnik odustane od aplikacije.
  • 0xDEADD00D - koristi Android za označavanje VM prekida.
  • 0xDEAD10CC (Dead Lock) koji koristi zapisivanje sudara iOS-a kada aplikacija zaključa izvor u pozadini.
  • 0xBAADF00D (loša hrana) koju koristi funkcija LocalAlloc u sustavu Windows za uklanjanje pogrešaka.
  • 0xCAFED00D (Cafe dude) koji koristi Javaov paket200 kompresije.
  • 0xCAFEBABE (Cafe babe) koju koristi Java kao identifikator za sastavljene datoteke klase
  • 0x0D15EA5E (bolest) koju je Nintendo koristio na Gamecube i Wii kako bi ukazao na normalno čizma.
  • 0x1BADB002 (1 loše čizma) koje koristi multiboot specifikacija kao čarobni broj
  • 0xDEADDEAD - koristi Windows da bi naznačio ručno pokrenutu debug crash, inače poznat kao Plavi ekran smrti.

Naravno, to nisu samo one, već samo kratki popis primjera koji su se činili zabavnim. Znate li više? Recite nam u komentarima.

Vidjeti primjere za sebe

Možete vidjeti više primjera otvaranjem heksadecimalnog urednika i otvaranjem bilo kojeg broja vrsta datoteka. Postoji mnogo freeware heksadecimalnih izdavača dostupnih za Windows, OS X ili Linux - samo pazite da pazite kada instalirate freeware da ne biste zaraženi crapwareom ili spywareom.

Kao dodatni primjer, slike za oporavak za telefone s Androidom kao što su ClockworkMod počinju s "ANDROID!" Ako su pročitane u ASCII formatu.

Bilješka: nemojte ništa mijenjati dok gledate uokolo. Urednici Hex mogu razbiti stvari!