sv.phhsnews.com


sv.phhsnews.com / Magic Numbers: De hemliga koderna som programmerare gömmer sig i din dator

Magic Numbers: De hemliga koderna som programmerare gömmer sig i din dator


Ända sedan den första personen skrev ut 5318008 på en räknare har nördar gömt hemliga siffror inuti datorn och använder dem att förhandla hemliga handslag mellan applikationer och filer. Idag tar vi en kort titt på några av de mer underhållande exemplen.

Vad är Magic Numbers?

De flesta programmeringsspråk använder en 32-bitars heltalstyp för att representera vissa typer av data bakom kulisserna - internt lagras numret i RAM eller används av CPU som 32 och nollor, men i källkoden skulle det skrivas ut i antingen vanligt decimalformat eller som hexadecimalt format, som använder siffrorna 0 till 9 och bokstäverna A till och med F.

När operativsystemet eller en applikation vill bestämma typen av en fil kan den se till början av filen för en särskild markör som indikerar filens typ. Exempelvis kan en PDF-fil börja med hex-värdet 0x255044462D312E33, vilket är lika med "% PDF-1.3" i ASCII-format, eller en ZIP-fil börjar med 0x504B, vilket motsvarar "PK", som kommer från det ursprungliga PKZip-verktyget. Genom att titta på denna "signatur" kan en filtyp enkelt identifieras även utan någon annan metadata.

Kompilerade Java Class-filer börjar med CAFEBABE

Linux-verktyget "fil" kan användas från terminalen för att bestämma typen av en fil - det läser faktiskt de magiska talen från en fil som heter "magi".

När en applikation vill ringa en funktion kan den överföra värden till den funktionen med hjälp av standardtyper som heltal, vilket kan uttryckas i källkoden i hexadecimalt format. Detta gäller speciellt för konstanter, vilka är identifierare definierade med läsbara namn som AUTOSAVE_INTERVAL, men de kartlägger till verkliga heltal (eller andra typ) värden. Så istället för att en programmerare skriver ut ett värde som 60 varje gång de kallar funktionen i källkoden, kan de använda AUTOSAVE_INTERVAL-konstanten för bättre läsbarhet. (Konstanter känns vanligtvis lätt igen eftersom de är skrivna i alla stora bokstäver).

Alla dessa exempel kan falla under termen Magic Numbers, eftersom de kan behöva ett specifikt hexadecimalt tal för att en funktion eller filtyp ska fungera korrekt ... om värdet inte är korrekt fungerar det inte. Och när en programmerare vill ha lite kul kan de definiera dessa värden med hjälp av hexadecimala tal som stavar ut någonting på engelska, annars känd som hexspeak.

Roligt med magiska nummer: Några anmärkningsvärda exempel

Varje AppleScript slutar med FADEDEAD

Om du snabbt tittar på Linux-källkoden ser du att systemrapporteringen _reboot () på Linux kräver en "magisk" variabel som ska överföras som motsvarar hexadecimalt tal 0xfee1dead. Om något försökte ringa den funktionen utan att passera det magiska värdet först, skulle det bara returnera ett fel.

GUID (globalt unik identifierare) för en BIOS-bootpartition i GPT-partitioneringsschemat är 21686148-6449-6E6F-744E -656564454649, som utgör ASCII-strängen "Hah! IdontNeedEFI", en hänvisning till det faktum att GPT normalt skulle användas i datorer som ersatte BIOS med UEFI, men det behöver inte nödvändigtvis vara.

Microsoft famously gömde 0x0B00B135 i deras Hyper-V virtuella maskin som stöder källkoden som skickats till Linux, ändrade de värdet till 0xB16B00B5, och slutligen bytte de till decimal innan det togs bort från källkoden helt.

Mer roliga exempel är:

  • 0xbaaaaaad - används av IOS-kraschloggning för att indikera att en logg är en stapelbild av hela systemet.
  • 0xbad22222 - Används av IOS-kraschloggning för att indikera att en VoIP-app har dödats av IOS eftersom den misshandlade.
  • 0x8badf00d - (Ate Bad Food) som används av IOS crash l
  • 0xdeadfa11 - (Dead Fall) som används av IOS-kraschloggning när en app stängs av en användare.
  • 0xDEADD00D - Används för att visa att en ansökan tog för lång tid att göra någonting och dödades av watchdog timeout. av Android för att indikera en VM-avbrott.
  • 0xDEAD10CC (Dead Lock) som används av IOS-kraschloggning när en applikation låser en resurs i bakgrunden.
  • 0xBAADF00D (Bad Food) som används av LocalAlloc-funktionen i Windows för felsökning.
  • 0xCAFED00D (Cafe dude) som används av Java's pack200
  • 0xCAFEBABE (Café babe) som används av Java som identifierare för kompilerade klassfiler
  • 0x0D15EA5E (Disease) som används av Nintendo på Gamecube och Wii för att indikera att en vanlig uppstart hände.
  • 0x1BADB002 (1 dålig boot ) som används av multiboot-specifikationen som ett magiskt nummer
  • 0xDEADDEAD - används av Windows för att indikera en manuellt initierad felsökningsolycka, annars känd som den Blå Dödsskärmen.

Det här är inte de enda där ute , men bara en kort lista med exempel som verkade roliga. Vet du mer? Berätta för oss i kommentarerna.

Se exempel på dig själv

Du kan se fler exempel genom att öppna en hex-redigerare och sedan öppna ett antal filtyper. Det finns gott om freeware hex redaktörer tillgängliga för Windows, OS X eller Linux - bara se till att du är försiktig när du installerar freeware för att inte bli smittad med crapware eller spyware.

Som ett tillägg kan återställningsbilder för Android-telefoner som ClockworkMod Börja med "ANDROID!" om det läses i ASCII-format.

Obs: Gå inte på att ändra något medan du tittar runt. Hex redaktörer kan bryta saker!


Vad är kurvor i Photoshop?

Vad är kurvor i Photoshop?

Kurvjusteringslagret är ett av de viktigaste verktygen i Photoshop. Det är det bästa sättet att justera ljusstyrkan och kontrasten på dina bilder. Om du vill bli bra med Photoshop måste du behärska kurvor. Om du inte känner till justeringslager, vill du lära dig om dem innan du läser den här artikeln.

(how-to)

Vad är stegen för att hitta en offentlig IP-adress på en dator?

Vad är stegen för att hitta en offentlig IP-adress på en dator?

Att få tillgång till en tjänst för att lära din offentliga IP-adress kan vara till stor hjälp, men hur fungerar processen? Dagens SuperUser Q & A-post har svaret på en nyfiken läsarens fråga. Dagens Frågor och svar-session kommer till vårt tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.

(how-to)