Введение
Hexspeak – это необычная форма вариантного английского правописания, использующая шестнадцатеричные цифры. Созданные программистами как легко запоминающиеся «магические числа», слова hexspeak могут служить чётким и уникальным идентификатором для обозначения памяти или данных. Шестнадцатеричная система счисления представляет числа, используя 16 цифр: 0123456789ABCDEF. Используя только буквы ABCDEF, можно составить несколько слов. Дополнительные слова можно образовать, используя некоторые десятичные числа как буквы: цифра "0" может представлять букву "O", а "1" – буквы "I" или "L". Менее часто "5" может заменять "S", "7" – "T", "12" – "R", а "6" или "9" – "G" или "g" соответственно. Числа, такие как 2, 4 или 8, могут использоваться аналогично leet или ребусам; например, слово "defecate" можно записать как DEFECA7E или DEFEC8.
Hexspeak is a novelty form of variant English spelling using the hexadecimal digits. Created by programmers as memorable magic numbers, hexspeak words can serve as a clear and unique identifier with which to mark memory or data. Hexadecimal notation represents numbers using the 16 digits 0123456789ABCDEF. Using only the letters ABCDEF it is possible to spell several words. Further words can be made by treating some of the decimal numbers as letters the digit "0" can represent the letter "O", and "1" can represent the letters "I" or "L". Less commonly, "5" can represent "S", "7" represent "T", "12" represent "R" and "6" or "9" can represent "G" or "g", respectively. Numbers such as 2, 4 or 8 can be used in a manner similar to leet or rebuses; e. g. the word "defecate" can be expressed either as DEFECA7E or DEFEC8.
Заметные магические числа
Многие компьютерные процессоры, операционные системы и отладчики используют магические числа, особенно в качестве магического значения отладки. Код десятичный Описание 0x0000000FF1CE 1044942 ("office") используется как последняя часть кодов продукта (GUID) для компонентов Microsoft Office (видимая в реестре под ключом реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall). 0x00BAB10C 12235020 ("uber (ooba) block") используется как магическое число для ZFS uberblock. 0x1BADB002 464367618 ("1 bad boot") – магическое число заголовка многозагрузки. 0x4B1D 19229 ("forbid") был паролем в некоторых калибровочных консолях для разработчиков, чтобы глубже изучить контрольные регистры за пределами нормального диапазона калибровочной памяти. 0x8BADF00D 2343432205 ("ate bad food") используется Apple в отчетах о сбоях iOS, когда приложение слишком долго запускается, завершается или реагирует на системные события. 0xABADBABE 2880289470 ("a bad babe") использовалось/используется в Windows 7 для вызова точки останова отладчика, вероятно, при подключении USB-устройства. 0xB105F00D 2969956365 ("BIOS food") – это значение младших байтов последних четырех регистров в компонентах, совместимых с ARM PrimeCell (регистры идентификации компонента), используемых для идентификации корректной работы компонента, отображаемого в памяти. 0xB16B00B5 2976579765 ("big boobs") требовалось гипервизору Hyper-V от Microsoft для использования гостевыми Linux-системами в качестве их "гостевой подписи". Одно предложение предлагало изменить его на 0x0DEFACED ("defaced"), но вместо этого он был первоначально изменен на десятичный, а затем полностью заменен. 0x0B00B135 184594741 ("boobies") также требовалось от гипервизора Hyper-V от Microsoft, чтобы пользователь XEN использовал его в качестве своего идентификатора пользователя. Он был удален 22 января 2010 года. 0xBAAAAAAD 3131746989 ("baaaaaad") используется в отчете об исключениях iOS от Apple, чтобы указать, что журнал является снимком всей системы, а не отчетом о сбое. 0xBAADF00D 3131961357 ("bad food") используется Microsoft LocalAlloc(LMEM_FIXED) для указания неинициализированной выделенной кучи памяти при использовании отладочной кучи. 0xBAD22222 3134333474 ("bad too repeatedly") используется журналом исключений iOS от Apple, чтобы указать, что приложение VoIP было завершено iOS из-за слишком частых перезапусков. 0xC00010FF 3221229823 ("cool off") используется Apple в отчетах о сбоях iOS, когда приложение было завершено в ответ на тепловое событие. Он также используется Mach-O для идентификации файлов универсальных объектов и языком программирования Java для идентификации файлов классов байт-кода Java. Изначально он был создан разработчиками NeXTSTEP как отсылка к бариста в Peet's Coffee & Tea. 0xCAFED00D 3405697037 ("cafe dude") используется Java в качестве магического числа для их сжатия pack200. 0xCEFAEDFE 3472551422 ("face feed") используется Mach-O для идентификации плоских (одноархитектурных) файлов объектов. В малой эндианности это читается как FEEDFACE, "Feed Face". 0x0D15EA5E 219540062 ("zero disease") – флаг, указывающий на обычную загрузку на консолях GameCube и Wii. 0xDABBAD00 3669732608 ("dabba doo") – название блога о компьютерной безопасности. 0xDEAD2BAD 3735890861 ("dead too bad") использовалось для обозначения выделенных областей памяти, которые еще не были инициализированы в системах Sequent Dynix/ptx. 0xDEADBAAD 3735927469 ("dead bad") используется функцией abort libc Android при обнаружении повреждения нативной кучи. 0xDEADBABE 3735927486 ("dead babe") используется IBM Jikes RVM в качестве проверки целостности стека основной нити. 0xDEADBEAF 3735928495 ("dead beaf") является частью кода подписи файлов тайлсетов Jazz Jackrabbit 2. Файлы уровней имеют меньше места для своих подписей и используют 0xBABE ("babe") вместо этого. Это также заголовок кампании, используемой в серии игр Halo. deadbeef dead beef dead beef00000075 295990755083049101712519384016336453749 ("dead beef") – GUID, присвоенный зависшим/неработающим виртуальным машинам в Citrix XenServer. 0xDEADBEEF 3735928559 ("dead beef") часто используется для обозначения сбоя программного обеспечения или взаимной блокировки во встроенных системах. 0xDEADBEEF первоначально использовалось для обозначения вновь выделенных областей памяти, которые еще не были инициализированы. При сканировании дампа памяти легко увидеть 0xDEADBEEF. Он используется системами IBM RS/6000, Mac OS на 32-битных процессорах PowerPC и Commodore Amiga в качестве магического значения отладки. На Solaris от Sun Microsystems это означает освобожденную память ядра. Консоль DEC Alpha SRM имеет фоновый процесс, который перехватывает ошибки памяти, идентифицированные PS как "BeefEater waiting on 0xdeadbeef". 0xDEADC0DE 3735929054 ("dead code") используется в качестве маркера в прошивке OpenWrt для обозначения начала создаваемой файловой системы jffs2 в конце статической прошивки. 0xDEADDEAD 3735936685 ("dead dead") – код проверки ошибок (STOP), отображаемый при вызове "синего экрана смерти" либо путем сообщения ядру через подключенный отладчик, либо с помощью специальной комбинации клавиш. Обычно это видят разработчики драйверов, так как это используется для получения дампа памяти в системах на базе Windows NT. Альтернативой 0xDEADDEAD является код проверки ошибок 0x000000E2, поскольку оба называются MANUALLY INITIATED CRASH, как указано на Microsoft Developer Network. 0xDEADD00D 3735932941 ("dead dude") используется Android в виртуальной машине Dalvik для указания аварийного завершения работы виртуальной машины. 0xDEADFA11 3735943697 ("dead fall" или "dead fail") используется Apple в отчетах о сбоях iOS, когда пользователь принудительно завершает работу приложения. 0xD0D0CACA 3503344330 ("doo doo caca") – неинициализированное значение GPIO на Nvidia Tegra X1. 0xE011CFD0 3759263696 ("docfile0") используется в качестве магического числа для файлов Microsoft Office. В малой эндианности это читается как D0CF11E0, "docfile0". 0xF0CACC1A 4039822362 ("focaccia") – восьмибуквенное слово hexspeak в словаре с самым высоким баллом в Scrabble (17 баллов в английской версии). 0xF1AC 61868 ("FLAC") используется в качестве тега аудиоформата Free Lossless Audio Codec. face:b00c 4207849484 ("facebook") используется в IPv6-адресах www.facebook.com. 0xFACEFEED 4207869677 ("face feed") используется серверами Alpha, работающими под управлением Windows NT. HAL Alpha генерирует эту ошибку при обнаружении аппаратной неисправности. 0xFBADBEEF 4222467823 ("bad beef") используется в макетах WebKit и Blink для указания известной, невосстановимой ошибки, такой как нехватка памяти. 0xFEEDBABE 4276992702 ("feed babe") – магическое число, используемое для указания начала дескриптора флэш-раздела OpenRG. 0xFEEDC0DE 4276994270 ("feed code") используется в качестве шаблона заполнения операционной системой OS 9 при инициализации ее оперативной памяти. 0xFEEDFACECAFEBEEF 18369614221190020847 ("feed face cafe beef") – магическое число, используемое для отправки в качестве пароля по последовательному порту для восстановления некоторых контроллеров, созданных NXP, из сбоев при загрузке. 0xFFBADD11 4290436369 ("bad DLL"): используется Windows внутренне. 0xF00DBABE 4027431614 ("food babe"): аппаратный криптовалютный кошелек Ledger Nano использовал это магическое число в процессе подписания, который был взломан.
Альтернативные буквы
Многие компьютерные языки требуют, чтобы шестнадцатеричное число было обозначено префиксом или суффиксом (или обоими), чтобы идентифицировать его как число. Иногда префикс или суффикс используются как часть слова. В языке программирования C используется префикс "0x" для обозначения шестнадцатеричного числа, но "0x" обычно игнорируется, когда люди читают такие значения как слова. C также позволяет суффикс L объявлять целое число как long, или LL – как long long, что позволяет записывать "0xDEADCELL" (мертвая ячейка). В обоих случаях в суффиксе может также появиться U, чтобы объявить целое число как беззнаковое, что позволяет записать "0xFEEDBULL" (корм для быка). В (не Unix) ассемблере Intel шестнадцатеричные числа обозначаются суффиксом "h", что позволяет записывать "0beach" (пляж). Следует отметить, что числа в этой нотации, начинающиеся с буквы, должны быть предварены нулем, чтобы отличить их от имен переменных. Ассемблер в стиле Unix вместо этого использует соглашения языка C (но ассемблеры в стиле Unix также доступны на x86 Unix-подобных ОС). Visual Basic и все предыдущие версии Microsoft BASIC, такие как QuickBasic, GWBasic, BASICA и ColorBASIC, используют префикс &H, например, "&HEADED" (с головой) и "&HADC0FFEE" (был кофе). В Pascal и нескольких языках ассемблера (6502, 6809 и др.) шестнадцатеричные числа обозначаются префиксом "$". Это позволяет использовать слова, начинающиеся с буквы "S", например "$EED" (семя). В программируемых калькуляторах Б3-34 использовался альтернативный шестнадцатеричный алфавит, где вместо латинских букв использовались символы "−", "L", "C", "Г", "E" и " " (пробел). С их помощью можно было отображать сообщения, такие как "EГГ0Г" (ошибка).
PlayStation 3 RSX
В ходе реверс-инжиниринга Sony PlayStation 3 было обнаружено несколько hexspeak-кодов, которые либо активируют, либо влияют на, либо присутствуют в процессах взаимодействия с гипервизором PlayStation 3 и его графическим процессором RSX Reality Synthesizer. Эти исследования во многом возникли благодаря PS3 homebrew, работающему на PS3 OtherOS, что позволяло устанавливать Linux, изначально с очень ограниченным доступом к GPU. Описание кодов: 0x1337BEEF, 0x1337F001, 0x1337BEEF – найдены в составе RSX Descriptor. 0xF00DBEEF – значение семафора RSX. 0x1337C0D3 и 0x1337BABE – начальное значение семафора и дополнение, предоставленные системой.