Magic Numbers: los códigos secretos que Programadores escondidas en tu PC

Desde que la primera persona que escribió 5318008 en una calculadora, nerds han estado escondiendo números secretos en el interior de su PC, y utilizarlos para negociar apretones de manos secretos entre las aplicaciones y archivos. Hoy damos un rápido vistazo a algunos de los ejemplos más entretenidos.

¿Cuáles son los números de magia?

La mayoría de los lenguajes de programación utilizan un tipo entero de 32 bits para representar ciertos tipos de datos detrás de las escenas - internamente el número se almacena en la memoria RAM o utilizado por la CPU como 32 unos y ceros, pero en el código fuente que se escribirían en cualquiera formato decimal regular, o como formato hexadecimal, que utiliza los números del 0 al 9 y las letras de la A a la F.
Cuando el sistema operativo o una aplicación quiere determinar el tipo de un archivo, se puede mirar hacia el principio del archivo para un marcador especial que significa el tipo de archivo.Por ejemplo, un archivo PDF podría comenzar con el valor hexadecimal 0x255044462D312E33, lo que equivale a "% PDF-1,3" en formato ASCII o un archivo ZIP comienza con 0x504B, lo que equivale a "PK", que desciende desde la utilidad original de PKZip. Al observar esta "firma", un tipo de archivo se puede identificar fácilmente, incluso sin ningún tipo de otros metadatos.
Archivos Java Class Compilado comienzan con CAFEBABE
El "archivo" Linux utilidad se puede utilizar desde el terminal para determinar el tipo de un archivo - de hecho, lee los números mágicos de un archivo llamado "magia".
Cuando una aplicación quiere llamar a una función, puede pasar valores a esa función utilizando los tipos estándar como número entero, que puede expresarse en el código fuente en formato hexadecimal. Esto es especialmente cierto para las constantes, que son identificadores definidos con nombres legibles como AUTOSAVE_INTERVAL, pero el mapa de número entero real (u otro tipo) valores. Así que en lugar de un programador escribir un valor, como 60 cada vez que llaman a la función en el código fuente, que podrían utilizar la constante AUTOSAVE_INTERVAL para una mejor legibilidad. (Constantes son generalmente fáciles de reconocer porque están escritos en letras mayúsculas).
Todos estos ejemplos pueden caer bajo el término Magic Numbers , porque podrían requerir un número hexadecimal específica para que una función o tipo de archivo funcione correctamente ... si el valor no es correcto, no funcionará. Y cuando un programador quiere tener un poco de diversión, podrían definir estos valores utilizando números hexadecimales que explican algo en Inglés, también conocido como hexspeak .

Diversión con Magic Numbers: algunos ejemplos notables

Cada AppleScript termina con FADEDEAD
Si usted toma una mirada rápida en el código fuente de Linux , verá que el _reboot () llamada al sistema en Linux requiere una variable "mágica" para ser pasado que es igual al número 0xfee1dead hexadecimal. Si hay algo que trató de llamar a esa función, sin pasar en ese valor mágico primero, que sería sólo devolverá un error.
El GUID (identificador único global) para una partición de arranque de BIOS en el esquema de partición GPT es 21686148-6449-6E6F-744E-656564454649, que forma la cadena ASCII "Hah! IdontNeedEFI", una alusión al hecho de que normalmente se utilizaría GPT en equipos que reemplazó BIOS con UEFI , pero no necesariamente tiene que ser.
Microsoft famoso escondió 0x0B00B135 en su código fuente de apoyo de máquina virtual de Hyper-V presentado a Linux, y luego cambiaron el valor a 0xB16B00B5 , y finalmente  cambiaron a decimal  antes de que fuera retirado del código fuente completo.
Ejemplos más divertidas incluyen:
  • 0xbaaaaaad - utilizado por la tala accidente iOS para indicar que el registro es un stackshot de todo el sistema.
  • 0xbad22222 - utilizado por la tala accidente iOS para indicar que una aplicación de VoIP ha sido asesinado por iOS porque se portaba mal.
  • 0x8badf00d - (Ate mala comida) utilizado por los registros de accidentes de iOS para indicar que una aplicación tardó demasiado en hacer algo y fue asesinado por el tiempo de espera vigilante.
  • 0xdeadfa11 - (Dead Fall) utilizado por iOS tala accidente cuando una aplicación es forzar la salida por un usuario.
  • 0xDEADD00D - utilizado por Android para indicar un aborto VM.
  • 0xDEAD10CC (Dead Lock) utilizado por la tala accidente iOS cuando una aplicación se bloquea un recurso en el fondo.
  • 0xBAADF00D (Bad Food) utilizado por el  LocalAlloc función en Windows para la depuración.
  • 0xCAFED00D (Cafe tipo) que utiliza la compresión pack200 de Java.
  • 0xCAFEBABE (Cafe nena) que utiliza Java como el identificador de archivos de clase compilados
  • 0x0D15EA5E (Enfermedad) utilizado por Nintendo en la Gamecube y Wii para indicar un arranque normal pasó.
  • 0x1BADB002 (1 mal arranque) utilizado por el arranque múltiple especificación como un número mágico
  • 0xDEADDEAD - utilizado por Windows para indicar un accidente de depuración iniciado manualmente , también conocida como la pantalla azul de la muerte.
Estos no son los únicos que hay, por supuesto, pero a una corta lista de ejemplos que parecían divertirse. Conozca de más? Dinos en los comentarios.

Al ver ejemplos para usted mismo

Puedes ver más ejemplos mediante la apertura de un editor hexadecimal y luego la apertura de cualquier número de tipos de archivo. Hay un montón de editores hexadecimales del freeware para Windows, OS X o Linux - sólo asegúrese de que usted tiene cuidado al instalar software gratuito para no infectarse con crapware o spyware.
Como ejemplo adicional, imágenes de recuperación para los teléfonos Android como ClockworkMod comienzan con "ANDROID" si se lee en formato ASCII.
img_5457b991ed819
Nota:  no van cambiar nada mientras que usted está mirando a su alrededor. Editores hexadecimales pueden romper cosas!