Mágikus számok A titkos kódok, amelyeket a programozók elrejtenek a számítógépen
Azóta, hogy az első személy 5318008-at írt ki egy számológépre, a nerds titkos számokat rejtett a számítógép belsejében, és titkos kézfogásokat követtek az alkalmazások és fájlok között. Ma gyorsan megnézzük néhány szórakoztatóbb példát.
Mik azok a mágikus számok?
A legtöbb programozási nyelv 32 bites egész típust használ, hogy bizonyos típusú adatokat jelenítsen meg a színfalak mögött - a belső számot RAM-ban tárolja, vagy a CPU 32-et és nullát használ, de a forráskódban mindkettőt kiírják. rendszeres decimális formátumban, vagy hexadecimális formátumban, amely a 0-tól 9-ig terjedő számokat és az A – F 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ézhet egy olyan speciális jelölőre, amely a fájl típusát jelzi. Például egy PDF-fájl elindulhat a 0x255044462D312E33 hexadecimális értékkel, amely ASCII formátumban megegyezik a „% PDF-1.3” értékkel, vagy egy ZIP-fájl 0x504B-vel kezdődik, ami „PK” -nak felel meg, amely az eredeti PKZip segédprogramból leszáll. Ha megnézzük ezt az „aláírást”, egy fájltípus könnyen azonosítható más metaadatok nélkül is.
A fordított Java osztályú fájlok CAFEBABE-vel kezdődnekA Linux segédprogram „fájlja” felhasználható a terminálról egy fájl típusának meghatározásához - valójában a mágikus számokat egy „varázslat” fájlból olvassa.
Amikor egy alkalmazás egy függvényt akar hívni, akkor az értékeket átadhatja a függvénynek olyan szabványos típusokkal, mint az egész szám, amely hexadecimális formátumban kifejezhető a forráskódban. Ez különösen igaz az olyan konstansokra, amelyek az ember által olvasható nevekkel, mint például az AUTOSAVE_INTERVAL által definiált azonosítók, de az aktuális egész (vagy más típusú) értékekre mutatnak. Tehát egy olyan programozó helyett, amelyik a 60-as értéket adja meg minden alkalommal, amikor a forráskódban hívja a függvényt, a jobb olvashatóság érdekében használhatják az AUTOSAVE_INTERVAL állandóját. (A konstanst általában könnyen felismerik, mert minden nagybetűvel vannak írva).
Mindezek a példák a „Magic Numbers” kifejezés alá tartozhatnak, mert egy adott hexadecimális számhoz szükség lehet ahhoz, hogy egy függvény vagy fájltípus megfelelően működjön… ha az érték nem megfelelő, akkor nem fog működni. És amikor egy programozó egy kicsit szórakozni akar, ezeket az értékeket hexadecimális számokkal határozhatja meg, amelyek angolul írnak valamit, más néven hexspeak.
Szórakoztató mágikus számokkal: Néhány figyelemre méltó példa
Minden AppleScript a FADEDEAD-el végződikHa gyorsan megvizsgálja a Linux forráskódját, látni fogja, hogy a _reboot () rendszerhívás Linuxon egy „mágikus” változót igényel, amely megegyezik a 0xfee1dead hexadecimális számával. Ha valami megpróbálta felhívni ezt a függvényt anélkül, hogy először belépett volna a mágikus értékbe, akkor csak egy hiba lépne vissza.
A GPT particionáló séma BIOS rendszerindítási partíciójának GUID (globálisan egyedi azonosítója) a 21686148-6449-6E6F-744E-656564454649, amely az ASCII sztringet „Hah! IdontNeedEFI” alkotja. olyan számítógépeken, amelyek kicserélték a BIOS-t UEFI-val, de nem feltétlenül kell.
A Microsoft híresen elrejtette a 0x0B00B135-öt a Linuxra küldött Hyper-V virtuális gép támogató forráskódjában, majd 0xB16B00B5 értékre változtatta, és végül tizedesre váltották, mielőtt teljesen eltávolították volna a forráskódból..
A szórakoztatóbb példák a következők:
- 0xbaaaaaad - az iOS összeomlási naplózása használja, hogy jelezze, hogy egy napló a teljes rendszer stackshotja.
- 0xbad22222 - az iOS összeomlási naplózása használta, hogy jelezze, hogy az iOS megölte a VoIP alkalmazást, mert rosszul mentett.
- 0x8badf00d - (Ate Bad Food), amelyet az iOS összeomlási naplók használnak annak jelzésére, hogy egy alkalmazás túl sokáig tartott, hogy valamit tegyen, és az őrjárat lejárta.
- 0xdeadfa11 - (Dead Fall), amelyet az iOS összeomlás naplózása használ, amikor egy alkalmazás erőszakos kilépést végez egy felhasználó által.
- 0xDEADD00D - az Android által használt VM megszakításának jelzése.
- 0xDEAD10CC (Dead Lock), amelyet az iOS összeomlási naplózása használ, amikor egy alkalmazás zárolja az erőforrást a háttérben.
- 0xBAADF00D (Bad Food), amelyet a Windows LocalAlloc funkciója használ a hibakereséshez.
- 0xCAFED00D (Cafe dude), amit a Java pack200 tömörítése használ.
- 0xCAFEBABE (Cafe babe), amelyet a Java a fordított osztályfájlok azonosítójaként használ
- 0x0D15EA5E (betegség), amelyet a Nintendo a Gamecube-on használ, és a Wii-t, hogy jelezze a normál indítást.
- 0x1BADB002 (1 rossz boot), amelyet a multi-boot specifikáció mágikus számként használ
- 0xDEADDEAD - a Windows által használt, manuálisan kezdeményezett hibakeresési jelzés, más néven a Halál Kék Képernyője..
Ezek természetesen nem az egyetlenek, hanem csak egy rövid lista a példákról, amelyek szórakoztatónak tűntek. Tudja már többet? Mondja el nekünk a megjegyzéseket.
Példák látása magadra
Több példát láthat, amikor megnyit egy hex szerkesztőt, majd megnyitja a tetszőleges számú fájltípust. Számos freeware hex szerkesztő áll rendelkezésre a Windows, az OS X vagy a Linux számára - csak győződjön meg róla, hogy óvatosak vagyunk a freeware telepítésekor, hogy ne fertőződjenek meg a crapware vagy a kémprogramokkal.
További példaként az Android-telefonok, mint például a ClockworkMod helyreállítási képei az „ANDROID!” -Vel kezdődnek, ha az ASCII formátumban olvasható.
Jegyzet: ne menjen semmit, miközben körülnéz. Hex szerkesztők megszakíthatják a dolgokat!