Hexspeak

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Hexspeak, как и Leet, является новой необычной формой записи слов английского языка.

Hexspeak был создан программистами, которые желали использовать магические числа, целочисленные константы для однозначной идентификации ресурса или данных. Используя шестнадцатеричную систему, состоящую из десятичных цифр от 0 до 9 и латинских букв от A до F (0123456789ABCDEF), стало возможно создавать небольшие слова, в которых цифра «0» обозначает букву «O», «1» обозначает буквы «I» или «L», «5» обозначает «S», «7» обозначает «T», и «6» или «9» обозначает «G» или «g» соответственно. Такие цифры, как 2 или 8 могут использоваться так же, как они используются в Leet или ребусах; например, слово «defecate» может быть представлено в виде DEFECA7E или же DEFEC8.

Известные магические числа[править | править вики-текст]

Значительное количество процессоров, операционных систем и отладчиков используют магические числа, особенно в качестве магических отладочных значений.

  • 0x8BADF00D («ate bad food», рус. ел плохую пищу) используется Apple в отчётах об ошибках iOS для обозначения ситуации, когда приложение слишком долго либо запускается, либо завершается, либо отвечает на события системы.[1]
  • 0xABADBABE («a bad babe», рус. плохая девочка) используется Apple в качестве магического числа для «Boot Zero Block».[источник не указан 1479 дней]
  • 0x1BADB002 («I bad boot»[источник не указан 1479 дней], рус. плохая загрузка) — магическое число заголовка мультизагрузчика.[2]
  • 0xBAADF00D («bad food», рус. плохая еда) используется LocalAlloc(LMEM_FIXED) компании Microsoft для обозначения не инициализированной области памяти при использовании debug heap.[3]
  • 0xBADCAB1E («bad cable», рус. плохой кабель) — код ошибки, возвращаемый отладчику Microsoft eVC debugger в случае разрыва соединения.[источник не указан 1479 дней]
  • 0xBADDCAFE («bad cafe», рус. плохое кафе) используется отладочным распределителем памяти 'watchmalloc' в OpenSolaris для обозначения выделенной, но незадействованной памяти.[источник не указан 1479 дней]
  • 0xBEADFACE («bead face, face bead», рус. ) — шаблон, заполняющий всю неиспользуемую память в симуляторе микроконтроллера Motorola 68HCS12DP256, SimHC12.
  • 0xCAFEBABE («cafe babe», рус. ) используется Mach-O для указания на Universal объектные фалы, а так же в языке Java для идентификации файлов классов Java bytecode.[4]
  • 0xCAFED00D («Cafe Dude», рус. ) используется в Java как магическое число для его pack200 сжатия.[источник не указан 1479 дней]
  • 0xD15EA5E («disease», рус. ) флаг, указывающий на нормальную загрузку на Nintendo GameCube и Wii консолях.[5][6]
  • 0xDEADBABE («Dead Babe», рус. ) используется IBM Jikes RVM для контроля стека главного потока[7]
  • 0xDEADBEEF («dead beef», рус. мёртвая говядина) часто используется для обозначения аварийного завершения программы или зависания во встраиваемых устройствах. Используется в системах IBM RS/6000, Mac OS на 32-битных процессорах PowerPC и Commodore Amiga в качестве магического числа для отладки. В Solaris оно обозначает освобождённую память ядра. В OpenVMS на процессорах Alpha можно увидеть DEAD_BEEF, нажав клавиши CTRL+T. В консоли у DEC Alpha SRM есть фоновый процесс, который следит за ошибками в памяти, определяемый в PS как «BeefEater waiting on 0xdeadbeef».[8].
  • 0xDEADDEAD («dead dead», рус. мертвый мертвый) отладочный код отображаемый при вызове Синего Экрана Смерти при помощи отладчика ядра или используя специальную комбинацию клавиш.[9] Этим обычно пользуются разработчики драйверов для получения дампа памяти в операционных системах на базе Windows NT. Альтернативным кодом 0xDEADEAD является 0x000000E2,[10] также называемый MANUALLY_INITIATED_CRASH на Microsoft Developer Network.
  • 0xDEADFA11 («dead fall», рус. ) используется Apple в iOS при падениях системы, когда пользователь вынужден закрыть приложение.[1]
  • 0xDEFEC8ED («defecated», рус. чистый) — магическое число для дампов памяти OpenSolaris.[11]
  • 0xFACEFEED («face feed», рус. ) Используется в серверах Alpha работающих под управлением Windows NT. Alpha Hardware Abstraction Layer (HAL) генерирует эту ошибку когда встречает аппаратный сбой.[12]
  • 0xFEE1DEAD («feel dead», рус. ) используется как магическое число в Linux в системном вызове reboot.[13]
  • 0xFEEDCAFE («feed cafe», рус. ) используется вместе с 0xDEADBEEF аналогично «foo» и «bar».
  • 0xFEEDFACE («feed face», рус. корми лицо) используется как сигнатура Mach-O бинарных файлов и как значение неверного указателя для 'watchmalloc' в OpenSolaris.[источник не указан 1479 дней]
  • 0xC0FFEE («coffee», рус. кофе) используется в таких 24-битных DSP, как Motorola 56303.[источник не указан 1479 дней]
  • 0xE011CFD0 — магическое число для файлов Microsoft Office. В little-endian оно читается как D0CF11E0, «docfile0».[14]
  • 0xFACE8D — цвет кожи в формате RGB.

Создание магических чисел[править | править вики-текст]

Указанные выше слова — всего лишь небольшая часть из сотен слов английского языка, содержащих только буквы «a», «b», «c», «d», «e», «f», «o», «i» и «s», поэтому программистам легко создавать собственные, такие как 0xD15EA5ED или 0xBED51DE5. Можно заметить несколько шаблонов в классических hexspeak константах, перечисленных выше. Все эти константы используют всю ширину машинного слова (в данном случае 32-битного), и ни одно из них не начинается с 1 или 5. Такой выбор означает, что если слово интерпретировать целое число в десятичной записи, то это обычно большое отрицательное целое.Microsoft’s 0xBAADF00D так же хорошее значение для отлова доступа к не проинициализированной памяти по другой причине—окончание слова «1», «5», «b», «d», или «f» всегда создаёт странное число, которое генерирует unaligned pointer exception на многих процессорных архитектурах, если константа интерпретирована как значение указателя.

Альтернативные буквы[править | править вики-текст]

  • В языке программирования Ada шестнадцатеричные числа заключены в «16#» и «#». Например: «16#Ada_Ada_Ada_Ada#».
  • В языке программирования C для обозначения шестнадцатеричных чисел используется префикс «0x». При чтении слов он обычно игнорируется.
  • В ассемблере 6502 шестнадцатеричные числа обозначены префиксом «$». Это позволяет использовать слова, начинающиеся на «S», например $EED («seed»).
  • В Ассемблере с Intel-синтаксисом шестнадцатеричные числа имеют окончание «h». Например: FEEDADEADF15h («feed a dead fish» — «корми мёртвую рыбу»). Заметим, что числа в такой записи не могут начинаться буквой, дабы компилятор не путал их с переменными, поэтому в начале вводится ноль. Так число «FEEDADEADF15h» должно быть записано как «0FEEDADEADF15h».

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]

  1. 1 2 Technical Note TN2151: Understanding and Analyzing iPhone OS Application Crash Reports. Архивировано из первоисточника 2 июля 2012.
  2. Multiboot specifications. Архивировано из первоисточника 2 июля 2012.
  3. Win32 Debug CRT Heap Internals. Архивировано из первоисточника 2 июля 2012.
  4. Why Cafebabe. Artima.com. Проверено 1 октября 2009. Архивировано из первоисточника 2 июля 2012.
  5. Yet Another Gamecube Documentation: Dolphin-OS Globals. Архивировано из первоисточника 2 июля 2012.
  6. Wiibrew: Memory Map. Архивировано из первоисточника 2 июля 2012.
  7. DEADBABE sanity check. Проверено 1 октября 2009. Архивировано из первоисточника 2 июля 2012.
  8. Jargon File entry for DEADBEEF. Catb.org. Проверено 1 октября 2009. Архивировано из первоисточника 2 июля 2012.
  9. Bug Check 0xDEADDEAD: MANUALLY_INITIATED_CRASH, MSDN. msdn.microsoft.com (1 октября 2009). Проверено 13 октября 2009. Архивировано из первоисточника 2 июля 2012.
  10. Bug Check 0xE2: MANUALLY_INITIATED_CRASH, MSDN. msdn.microsoft.com (1 октября 2009). Проверено 13 октября 2009. Архивировано из первоисточника 2 июля 2012.
  11. Opensolaris header line 48 for 0xDEFEC8ED. Cvs.opensolaris.org. Проверено 1 октября 2009. Архивировано из первоисточника 2 июля 2012.
  12. Technet article for 0xFACEFEED. Support.microsoft.com (1 ноября 2006). Проверено 1 октября 2009. Архивировано из первоисточника 2 июля 2012.
  13. include/linux/reboot.h. Архивировано из первоисточника 2 июля 2012.
  14. Documents That Are Supported by the Office Filter. Архивировано из первоисточника 2 июля 2012.