Hjemmeside » hvordan » Magic Numbers Hemmelig kodes som programmerere skjuler i din PC

    Magic Numbers Hemmelig kodes som programmerere skjuler i din PC

    Helt siden den første personen skrev ut 5318008 på en kalkulator, har nerdene skjult hemmelige tall inne i PCen, og bruker dem til å forhandle hemmelige håndtrykk mellom applikasjoner og filer. I dag tar vi en rask titt på noen av de mer underholdende eksemplene.

    Hva er Magic Numbers?

    De fleste programmeringsspråk bruker en 32-biters heltalltype til å representere bestemte typer data bak kulissene - internt lagres nummeret i RAM eller brukes av CPU som 32 og nuller, men i kildekoden vil det bli skrevet ut i enten vanlig desimalformat, eller som heksadesimale format, som bruker tallene 0 til 9 og bokstavene A til F.

    Når operativsystemet eller et program ønsker å bestemme typen av en fil, kan den se til begynnelsen av filen for en spesiell markør som betyr typen av filen. For eksempel kan en PDF-fil starte med hex-verdien 0x255044462D312E33, som tilsvarer "% PDF-1.3" i ASCII-format, eller en ZIP-fil starter med 0x504B, som tilsvarer "PK", som stammer fra det opprinnelige PKZip-verktøyet. Ved å se på denne "signaturen" kan en filtype enkelt identifiseres selv uten andre metadata.

    Kompilerte Java Class-filer starter med CAFEBABE

    Linux-verktøyet "fil" kan brukes fra terminalen for å bestemme typen av en fil - faktisk leser det magiske tallene fra en fil som heter "magi".

    Når et program ønsker å ringe en funksjon, kan det passere verdier til den funksjonen ved hjelp av standardtyper som heltall, som kan uttrykkes i kildekoden i hexadecimalt format. Dette gjelder spesielt for konstanter, som er identifikatorer som er definert med menneskelige lesbare navn som AUTOSAVE_INTERVAL, men de kartlegger til ekte heltall (eller annen type) -verdier. Så i stedet for en programmør skrive ut en verdi som 60 hver gang de kaller funksjonen i kildekoden, kan de bruke AUTOSAVE_INTERVAL-konstanten for bedre lesbarhet. (Konstanter blir vanligvis lett gjenkjent fordi de er skrevet i alle store bokstaver).

    Alle disse eksemplene kan falle under termen Magic Numbers, fordi de kanskje krever et bestemt heksadesimale tall for at en funksjon eller filtype skal fungere skikkelig ... hvis verdien ikke er riktig, virker den ikke. Og når en programmerer vil ha litt moro, kan de definere disse verdiene ved hjelp av heksadesimale tall som stikker ut noe på engelsk, ellers kjent som hexspeak.

    Morsomt med magiske tall: Noen bemerkelsesverdige eksempler

    Hver AppleScript slutter med FADEDEAD

    Hvis du tar en rask titt på Linux-kildekoden, ser du at systemreisen _reboot () på Linux krever en "magisk" variabel som skal overføres som tilsvarer det heksadesimale nummer 0xfee1dead. Hvis noe forsøkte å kalle den funksjonen uten å passere den magiske verdien først, ville det bare gi tilbake en feil.

    GUID-en (globalt unik identifikator) for en BIOS-oppstartspartisjon i GPT-partisjoneringsskjemaet er 21686148-6449-6E6F-744E-656564454649, som danner ASCII-strengen "Hah! IdontNeedEFI", en henvisning til at GPT normalt vil bli brukt i datamaskiner som erstattet BIOS med UEFI, men det trenger ikke nødvendigvis å være.

    Microsoft gjemt gjemt 0x0B00B135 i sin Hyper-V virtuelle maskin, som støttet kildekoden som ble sendt til Linux, da endret de verdien til 0xB16B00B5, og til slutt endret de den til desimal før den ble fjernet fra kildekoden helt.

    Mer morsomme eksempler inkluderer:

    • 0xbaaaaaad - brukes av IOS-krasjlogging for å indikere at en logg er et stakkord av hele systemet.
    • 0xbad22222 - brukes av IOS-krasjlogging for å indikere at en VoIP-app har blitt drept av iOS fordi den misforstod.
    • 0x8badf00d - (Ate Bad Food) brukt av IOS-krasjlogger for å indikere at et søknad tok for lang tid å gjøre noe og ble drept av watchdog timeout.
    • 0xdeadfa11 - (Dead Fall) brukt av IOS-krasjlogging når en app er avviklet av en bruker.
    • 0xDEADD00D - brukt av Android for å indikere at VM avbrytes.
    • 0xDEAD10CC (Dead Lock) brukt av IOS-krasjlogging når et program låser en ressurs i bakgrunnen.
    • 0xBAADF00D (dårlig mat) brukt av LocalAlloc-funksjonen i Windows for feilsøking.
    • 0xCAFED00D (Cafe dude) brukt av Java's pack200 komprimering.
    • 0xCAFEBABE (Cafe babe) brukt av Java som identifikator for sammensatte klassefiler
    • 0x0D15EA5E (sykdom) brukt av Nintendo på Gamecube og Wii for å indikere at en normal oppstart skjedde.
    • 0x1BADB002 (1 dårlig oppstart) brukt av multiboot-spesifikasjonen som et magisk nummer
    • 0xDEADDEAD - brukes av Windows for å indikere en manuelt igangsatt feilsøking, ellers kjent som Blue Screen of Death.

    Disse er ikke de eneste der ute, selvfølgelig, men bare en kort liste over eksempler som virket morsomme. Vet du noe mer? Fortell oss i kommentarene.

    Se eksempler for deg selv

    Du kan se flere eksempler ved å åpne et hex-redigeringsprogram og deretter åpne et hvilket som helst antall filtyper. Det er mange freeware heksredaktører tilgjengelig for Windows, OS X eller Linux - bare vær sikker på at du er forsiktig når du installerer freeware for ikke å bli smittet med crapware eller spionprogrammer.

    Som et ekstra eksempel starter gjenopprettingsbilder for Android-telefoner som ClockworkMod med "ANDROID!" Hvis de leses i ASCII-format.

    Merk: Ikke skift noe mens du ser deg rundt. Hex redaktører kan bryte ting!