24Aug

Mágikus számok: azok a titkos kódok, amelyeket a programozók elrejtenek a számítógépeden

Amióta az első személy 5318008-at írt ki egy számológépen, a nerds titkos számokat rejtett el a számítógépén, és felhasználta őket titkos kézfogásokat az alkalmazások és a fájlok között. Ma rögtön megnézzük néhány szórakoztatóbb példát.

Mi a varázslatos szám?

A legtöbb programozási nyelv egy 32 bites egész típusú típust használ a bizonyos színtípusok megjelenítéséhez a jelenetek mögött - belsőleg a számot RAM-ban tárolja, vagy a CPU-t 32-ből és zérusként használja, de a forráskódban ez íródik kivagy a hexadecimális formátumban, amely a 0-tól 9-ig terjedő számokat és az A-tól F-ig terjedő betűket használja.

Ha az operációs rendszer vagy egy alkalmazás meg akarja határozni a fájl típusát, akkor a fájl elejére nézhetegy speciális jelölő számára, amely jelzi a fájl típusát. Például egy PDF-fájl kezdheti meg a 0x255044462D312E33 hexadecimális értéket, amely ASCII formátumban "% PDF-1.3", vagy a ZIP fájl 0x504B-vel kezdődik, ami az eredeti PKZip segédprogramtól származó "PK" értékkel egyenlő.Ezt az "aláírást" tekintve egy fájl típus könnyen azonosítható más metaadatok nélkül is.

A kompatibilis Java osztályfájlok a CAFEBABE

programmal kezdődnek A Linux segédprogram "fájlja" a terminálon használható a fájl típusának meghatározásához - sőt, a mágikus számokat a mágia nevű fájlból olvassa le.

Ha egy alkalmazás szeretnehogy hívjon egy függvényt, át tudja adni az értékeket erre a függvényre olyan szabványos típusok használatával, mint az egész szám, amely a forráskódban kifejezhető hexadecimális formátumban. Ez különösen igaz a konstansokra, amelyek olyan személyazonosítóval vannak definiálva, mint az AUTOSAVE_INTERVAL, hanem az aktuális egész( vagy más típusú) értékek. Tehát a programozó helyett 60-as értéket írnak be minden alkalommal, amikor hívják a funkciót a forráskódban, ezért jobban olvashatóvá tehetik az AUTOSAVE_INTERVAL konstansot.(A konstansokat általában könnyen felismerik, mert minden nagybetűvel íródnak).

Ezek a példák a Magic Numbers kifejezés alá eshetnek, mivel egy adott hexadecimális számot igényelhetnek ahhoz, hogy egy függvény vagy fájltípus megfelelően működjön. .. ha az érték nem helyes, akkor nem fog működni.És ha egy programozó szeretne egy kicsit szórakozni, akkor ezeket az értékeket hexadecimális számokkal határozhatja meg, amelyek angolul, vagyis hexspeak néven ismerteket tartalmaznak.

Fun With Magic Numbers: Néhány figyelemre méltó példa

Minden AppleScript befejeződik a FADEDEAD

-vel Ha gyorsan megnézed a Linux forráskódot, akkor látni fogod, hogy a _reboot() rendszer hívja a Linuxot, meg kell adni egy "magic" változótez a 0xfee1dead hexadecimális szám. Ha valami megpróbálta hívni ezt a funkciót, anélkül, hogy előbb átadná az adott mágikus értéket, akkor hiba lenne.

A GPT partícionálási sémában a BIOS indítópartíciójának GUID( globálisan egyedi azonosítója) 21686148-6449-6E6F-744E-656564454649, amely az ASCII "Hah! IdontNeedEFI" karakterláncot képezi, utal arra a tényre, hogy a GPT általábanolyan számítógépekben használt, amelyek a BIOS-t UEFI-vel helyettesítik, de nem feltétlenül kell.

A Microsoft a híres Hyper-V virtuális gépen támogatta a 0x0B00B135-t a Linuxra küldött forráskódot, majd 0xB16B00B5-re változtatta az értéket, és végül tizedesre váltották, mielőtt a forráskódot teljesen eltávolították volna.

Több szórakoztató példa:

  • 0xbaaaaaad - az iOS összeomlási naplózás azt jelzi, hogy egy napló a teljes rendszer stackshotja.
  • 0xbad22222 - az iOS összeomlási naplózása azt jelzi, hogy egy VoIP-alkalmazást megölt az iOS, mert rosszul működött.
  • 0x8badf00d -( Ate Bad Food) által használt iOS összeomló naplók jelzi, hogy egy alkalmazás túl sokáig tartott, hogy tegyen valamit, és megölték a watchdog időtúllépés.
  • 0xdeadfa11 -( Dead Fall), amelyet az iOS ütközésnaplózásakor használ, amikor egy alkalmazást a felhasználó kilép.
  • 0xDEADD00D - amelyet az Android használ a VM megszakításához. Az iOS ütközésnaplójában használt
  • 0xDEAD10CC( Dead Lock), amikor egy alkalmazás zárolja az erőforrást a háttérben.
  • 0xBAADF00D( Bad Food), amelyet a LocalAlloc függvény Windows rendszerben használ a hibakereséshez.
  • 0xCAFED00D( Cafe dude) által használt Java csomag200 tömörítés.
  • 0xCAFEBABE( Cafe babe), amelyet a Java a kódolt osztályfájlok azonosítójaként használt
  • 0x0D15EA5E( Betegség), amelyet a Nintendo használ a Gamecube és a Wii-n, jelezve, hogy normál boot történt.
  • 0x1BADB002( 1 rossz boot), amelyet a multiboot specifikáció mágikus számként használt
  • 0xDEADDEAD - a Windows által használt, kézzel kezdeményezett hibakeresési összeütközés jelzésére, más néven a halál kék képernyőjének.

Természetesen nem ezek az egyedüllők, de csak a példák rövid listája tűnt szórakoztatónak. Többet tudsz? Mondja el nekünk a megjegyzéseket.

Példák megtekintése magadra

Több példát láthatsz egy hatalmas szerkesztő megnyitásával, és megnyithatsz bármilyen számú fájltípust. Rengeteg ingyenes freeware hex editor áll rendelkezésre Windows, OS X vagy Linux számára - csak győződjön meg róla, hogy óvatosnak kell lennie a freeware telepítésénél, hogy ne fertőződjön meg a crapware-kel vagy kémprogramokkal.

Hozzáadott példa, az Android-telefonok, például a ClockworkMod helyreállítási képei az "ANDROID!" Használatával kezdődnek ASCII formátumban.

Megjegyzés: Az nem változtat semmit, miközben körülnéz. A Hex szerkesztők meg tudják szakítani a dolgokat!