it.phhsnews.com


it.phhsnews.com / Numeri magici: i codici segreti che i programmatori nascondono nel PC

Numeri magici: i codici segreti che i programmatori nascondono nel PC


Da quando la prima persona ha scritto 5318008 su una calcolatrice, i nerd nascondono numeri segreti all'interno del PC e li utilizzano per negoziare strette di mano segrete tra applicazioni e file. Oggi diamo uno sguardo ad alcuni degli esempi più divertenti.

Quali sono i numeri magici?

La maggior parte dei linguaggi di programmazione usa un tipo intero a 32 bit per rappresentare determinati tipi di dati dietro le quinte - internamente il numero è memorizzato in RAM o utilizzato dalla CPU come 32 e zeri, ma nel codice sorgente sarebbe scritto in formato decimale normale, o come formato esadecimale, che utilizza i numeri da 0 a 9 e le lettere da A a F.

Quando il sistema operativo o un'applicazione vuole determinare il tipo di un file, può guardare all'inizio del file per un indicatore speciale che indica il tipo del file. Ad esempio, un file PDF potrebbe iniziare con il valore esadecimale 0x255044462D312E33, che equivale a "% PDF-1.3" in formato ASCII, oppure un file ZIP inizia con 0x504B, che equivale a "PK", che discende dall'utilità PKZip originale. Osservando questa "firma", un tipo di file può essere facilmente identificato anche senza altri metadati.

I file di classi Java compilati iniziano con CAFEBABE

Il "file" di utilità Linux può essere utilizzato dal terminale per determinare il tipo di un file - infatti, legge i numeri magici da un file chiamato "magic".

Quando un'applicazione vuole chiamare una funzione, può passare valori a quella funzione usando tipi standard come numero intero, che possono essere espressi in il codice sorgente in formato esadecimale. Ciò è particolarmente vero per le costanti, che sono identificatori definiti con nomi leggibili come AUTOSAVE_INTERVAL, ma si associano ai valori interi (o di altro tipo) effettivi. Quindi, invece di un programmatore che digita un valore come 60 ogni volta che chiama la funzione nel codice sorgente, potrebbe utilizzare la costante AUTOSAVE_INTERVAL per una migliore leggibilità. (Le costanti di solito sono facilmente riconoscibili perché sono scritte in lettere maiuscole).

Tutti questi esempi possono rientrare nel termine Magic Numbers, perché potrebbero richiedere un numero esadecimale specifico per far funzionare correttamente una funzione o un tipo di file ... se il valore non è corretto non funzionerà. E quando un programmatore vuole divertirsi un po ', potrebbe definire questi valori usando numeri esadecimali che spiegano qualcosa in inglese, altrimenti noto come hexspeak.

Divertimento con numeri magici: alcuni esempi notevoli

Ogni AppleScript termina con FADEDEAD

Se date una rapida occhiata al codice sorgente di Linux, vedrete che la chiamata di sistema _reboot () su Linux richiede che venga passata una variabile "magica" uguale al numero esadecimale 0xfee1dead. Se qualcosa ha provato a chiamare quella funzione senza passare prima il valore magico, restituirebbe un errore.

Il GUID (identificatore univoco globale) per una partizione di avvio BIOS nello schema di partizionamento GPT è 21686148-6449-6E6F-744E -656564454649, che forma la stringa ASCII "Hah! IdontNeedEFI", un'allusione al fatto che GPT sarebbe normalmente utilizzato nei computer che hanno sostituito il BIOS con UEFI, ma non necessariamente deve essere.

Microsoft ha notoriamente nascosto 0x0B00B135 nella loro macchina virtuale Hyper-V che supporta il codice sorgente inviato a Linux, quindi hanno cambiato il valore in 0xB16B00B5 e infine lo hanno convertito in decimale prima di essere completamente rimosso dal codice sorgente.

Altri esempi divertenti includono:

  • 0xbaaaaaad - utilizzato dalla registrazione degli arresti anomali di iOS per indicare che un registro è uno stackshot dell'intero sistema.
  • 0xbad22222 - utilizzato dalla registrazione anomala di iOS per indicare che un'app VoIP è stata uccisa da iOS perché non funzionava.
  • 0x8badf00d - (Ate Bad Food) utilizzato dall'hash di iOS l per indicare che un'applicazione ha impiegato troppo tempo per fare qualcosa ed è stata uccisa dal timeout del watchdog.
  • 0xdeadfa11 - (Dead Fall) utilizzato dalla registrazione di crash di iOS quando un'applicazione viene forzata da un utente.
  • 0xDEADD00D - usato da Android per indicare l'interruzione della VM.
  • 0xDEAD10CC (Dead Lock) utilizzato dalla registrazione degli arresti anomali di iOS quando un'applicazione blocca una risorsa in background.
  • 0xBAADF00D (Bad Food) utilizzato dalla funzione LocalAlloc in Windows per il debug.
  • 0xCAFED00D (tipo di caffè) utilizzato da Java pack200 compressione.
  • 0xCAFEBABE (Cafe babe) utilizzato da Java come identificatore per i file di classe compilati
  • 0x0D15EA5E (Disease) utilizzato da Nintendo su Gamecube e Wii per indicare che si è verificato un avvio normale.
  • 0x1BADB002 (1 avvio errato ) usato dalla specifica multiboot come numero magico
  • 0xDEADDEAD - usato da Windows per indicare un crash di debug avviato manualmente, altrimenti noto come Blue Screen of Death.

Questi non sono gli unici là fuori, ovviamente , ma solo una breve lista di esempi che sembravano divertenti. Ne sai di più? Diteci nei commenti.

Vedendo esempi per voi

Potete vedere altri esempi aprendo un editor esadecimale e aprendo un numero qualsiasi di tipi di file. Sono disponibili numerosi editor esadecimici freeware per Windows, OS X o Linux - assicurati di stare attento quando installi freeware per non essere infettato da crapware o spyware.

Come esempio aggiunto, immagini di recupero per telefoni Android come ClockworkMod inizia con "ANDROID!" se letto in formato ASCII.

Nota: non cambiare nulla mentre ti guardi intorno. Gli editor esadecimali possono rompere le cose!


Come calcolare le Exact IVs del tuo Pokémon con il nuovo sistema di valutazione di Pokémon GO

Come calcolare le Exact IVs del tuo Pokémon con il nuovo sistema di valutazione di Pokémon GO

Se giochi Pokémon GO, allora naturalmente vuoi i migliori Pokémon possibili che puoi ottenere. Il fatto è sapere quanto è buono un singolo Pokémon va ben oltre il semplice guardare il suo CP e spostarlo. Ogni Pokémon ha i propri IV - Valori Individuali - che definiscono come si svolgeranno effettivamente in battaglia.

(how-to)

Esportare i contatti da Outlook, Outlook Express e Windows Live Mail

Esportare i contatti da Outlook, Outlook Express e Windows Live Mail

Hai bisogno di esportare i tuoi contatti fuori da Outlook? Lavoravo in un ufficio in cui sono installate più versioni di Office sui computer dei dipendenti, tra cui Office 2003, Office 2007, Office 2010 e Office 2013! Quando qualcuno cambia computer, di solito finisco per dover esportare le loro e-mail e i loro contatti su un altro computer, che più spesso aveva una versione diversa di Office installata.S

(How-to)