Amióta az első ember kiírta az 5318008 számológépet, a majmok titkos számokat rejtettek a számítógépedbe, és titkos kézfogásokról tárgyaltak az alkalmazások és fájlok között. Ma gyorsan megvizsgálunk 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ípusú típust használ bizonyos adattípusok megjelenítéséhez a kulisszák mögött - a számot belsőleg a RAM-ban tárolják, vagy a CPU 32-ként és nullákként használja, de a forráskódban ezt kiírják rendes tizedes formátumban, vagy hexadecimális formátumban, amely a 0 és 9 közötti számokat, valamint az A – F betűket használja.
Amikor 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 speciális jelölővel, amely a fájl típusát jelöli. Például egy PDF-fájl a 0x255044462D312E33 hexadecimális értékkel kezdődhet, amely ASCII formátumban megegyezik a „% PDF-1.3” értékkel, vagy egy ZIP-fájl 0x504B-vel kezdődik, amely megegyezik a PKZip eredetivel, amely az eredeti PKZip segédprogramból származik. Ezt az „aláírást” megnézve egy fájltípus könnyen azonosítható más metaadatok nélkül is.
A Linux fájl „fájlja” a terminálról használható a fájl típusának - sőt, annak meghatározására felolvassa a mágikus számokat egy fájlból az úgynevezett „varázslat”.
Ha egy alkalmazás függvényt akar meghívni, akkor átadhatja az értékeket annak a függvénynek szabványos típusok, például egész szám használatával, amelyek hexadecimális formátumban kifejezhetők a forráskódban. Ez különösen igaz az állandókra, amelyek az ember által olvasható nevekkel meghatározott azonosítók, például az AUTOSAVE_INTERVAL, de a tényleges egész (vagy más típusú) értékekhez társulnak. Tehát ahelyett, hogy egy programozó 60-as értéket írna ki minden alkalommal, amikor meghívják a függvényt a forráskódban, használhatja az AUTOSAVE_INTERVAL konstansot a jobb olvashatóság érdekében. (Az állandókat általában könnyen felismerhetjük, mert nagybetűvel írják őket).
Mindezek a példák a kifejezés alá tartozhatnak Varázsszámok , mert szükségük lehet egy adott hexadecimális számra a függvény vagy a fájltípus megfelelő működéséhez… ha az érték nem megfelelő, akkor nem fog működni. És amikor egy programozó egy kis szórakozásra vágyik, definiálhatja ezeket az értékeket hexadecimális számokkal, amelyek angolul írnak valamit, más néven hexspeak .
Fun with Magic Numbers: Néhány figyelemre méltó példa
Ha gyorsan megnézed a Linux forráskódjába , akkor látni fogja, hogy a _reboot () rendszerhívás Linux alatt megköveteli a „varázslat” változó átadását, amely megegyezik a 0xfee1dead hexadecimális számmal. Ha valami megpróbálja meghívni ezt a függvényt anélkül, hogy először átadná azt a varázsértéket, az csak hibát eredményezne.
A GUID (globálisan egyedi azonosító) a BIOS boot partíció ban,-ben GPT particionálási séma a 21686148-6449-6E6F-744E-656564454649, amely a Hah! IdontNeedEFI ASCII karakterláncot képezi, utalás arra a tényre, hogy a GPT-t általában számítógépek, amelyek a BIOS-t UEFI-re cserélték , de nem feltétlenül annak kell lennie.
A Microsoft híresen elrejtette 0x0B00B135 akkor a Linuxhoz benyújtott Hyper-V virtuális gépben támogatják a forráskódot megváltoztatták az értéket 0xB16B00B5-re és végül ők tizedesre váltotta mielőtt teljesen eltávolították volna a forráskódból.
További szórakoztató példák:
- 0xbaaaaaad - használta iOS összeomlási naplózás jelezni, hogy a napló a teljes rendszer halmaza.
- 0xbad22222 - az iOS összeomlási naplózása arra utal, hogy egy VoIP alkalmazást megölt az iOS, mert az rosszul viselkedett.
- 0x8badf00d - (Ate Bad Food), amelyet az iOS összeomlási naplói használtak annak jelzésére, hogy egy alkalmazás túl sok időt vett igénybe valamilyen művelet elvégzéséhez, és a megfigyelő időkorlátja megölte.
- 0xdeadfa11 - (Dead Fall), amelyet az iOS összeomlási naplózása használ, amikor egy alkalmazást kényszerítetten kilép a felhasználó.
- 0xDEADD00D - az Android a virtuális gép megszakításának jelzésére használja.
- 0xDEAD10CC (Holtzár), amelyet az iOS összeomlási naplózása használ, amikor egy alkalmazás egy erőforrást zár a háttérben.
- 0xBAADF00D (Rossz étel), amelyet a LocalAlloc funkció a Windows-ban a hibakereséshez.
- 0xCAFED00D (Cafe haver), amelyet a Java pack200 tömörítése használ.
- 0xCAFEBABE (Cafe babe), amelyet a Java használ a fordított osztályfájlok azonosítójaként
- 0x0D15EA5E (betegség), amelyet a Nintendo használt a Gamecube és Wii jelezni, hogy normális rendszerindítás történt.
- 0x1BADB002 (1 rossz indítás), amelyet a multiboot specifikáció varázsszámként
- 0xDEADDEAD - a Windows használja a manuálisan indított hibakeresési összeomlás , más néven a Halál Kék Képernyője.
Természetesen nem csak ezek vannak odakint, hanem csak egy rövid lista a szórakozásnak tűnő példákról. Tudsz még? Mondja el nekünk a megjegyzéseket.
Példákat látni magának
További példákat láthat egy hexaszerkesztő megnyitásával, majd tetszőleges számú fájltípus megnyitásával. Rengeteg freeware hexa szerkesztő áll rendelkezésre Windows, OS X vagy Linux számára - csak győződjön meg róla, hogy óvatos az ingyenes szoftver telepítésekor hogy ne fertőződjön meg crapware vagy spyware programtól.
Hozzáadott példaként az Android-telefonok, például a ClockworkMod helyreállítási képei az „ANDROID!” Betűvel kezdődnek ha ASCII formátumban olvassa el.
Jegyzet: ne változtass semmit, miközben körülnézel. A Hex szerkesztõi megszakíthatják a dolgokat!