Hexspeak

Hexspeak, як і Leet, є новою незвичайною формою запису слів англійської мови.

Hexspeak створили програмісти, які бажали використовувати магічні числа, цілочисельні константи для однозначної ідентифікації ресурсу або даних. За допомогою шістнадцяткової системи, що використовує десяткові цифри від 0 до 9 і латинські літери від A до F (0123456789ABCDEF), стало можливо створювати невеликі слова, в яких цифра «0» позначає букву «О», «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».[джерело?]
  • 0x1BADB002 («I bad boot», укр. погане завантаження) — магічне число заголовка мультизавантажувача.[2]
  • 0xBAADF00D («bad food», укр. погана їжа) використовує LocalAlloc(LMEM_FIXED) компанії Microsoft для визначення не ініціалізованої ділянки пам'яті під час використання debug heap.[3]
  • 0xBADCAB1E («bad cable», укр. поганий кабель) — код помилки, що повертається зневаджувачу Microsoft eVC debugger у разі розриву зв'язку.[джерело?]
  • 0xBADDCAFE («bad cafe», укр. погане кафе) використовує зневаджувальний раозподільник пам'яті watchmalloc в OpenSolaris для визначення виділеної, але незадіяної пам'яті.[джерело?]
  • 0xBEADFACE ("bead face, «face bead», укр. прикрась обличчя бісером) — шаблон, що заповнює всю невикористовувану пам'ять у симуляторі мікроконтролера Motorola 68HCS12DP256, SimHC12.
  • 0xCAFEBABE («cafe babe», укр. дівча з кафе) використовує Mach-O для вказування на універсальні виконувані файли, а також у мові Java для ідентифікації файлів класів Java bytecode.[4]
  • 0xCAFED00D («Cafe Dude», укр. молодик із кафе) використовується у Java як магічне число для його стиснення pack200.[джерело?]
  • 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. Альтернативним кодом 0xDEADDEAD є 0x000000E2, який ще називають MANUALLY_INITIATED_CRASH на Microsoft Developer Network.[10]
  • 0xDEADFA11 («dead fall», укр. смертельне падіння) використовує Apple в iOS під час падінь системи, коли користувач вимушений закрити застосунок.
  • 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.[джерело?]
  • 0xC0FFEE («coffee», укр. кава) використовується в таких 24-бітовх DSP, як Motorola 56303.[джерело?]
  • 0xE011CFD0 — магічне число для файлів Microsoft Office. В little-endian воно читаєтся як D0CF11E0, «docfile0».[14]
  • 0xFACE8D колір шкіри у форматі RGB.
  • 0xFEEE («free», укр. вільний) використовують Debug-конфігурації деяких компіляторів (напр., MSVC) для маркування вказівників на звільнену память.
  • 0xCCCCCCCC — також використовують Debug-конфігурації компіляторів для первинної ініціалізації вказівників на об'єкти.

Створення магічних чисел

Зазначені вище слова — лише незначна частина з сотень слів англійської мови, що містять тільки літери «a», «b», «c», «d», «e», «f», «o», «i» та «s», тому програмістам легко створювати власні, такі як 0xD15EA5ED або 0xBED51DE5. Можна помітити кілька шаблонів у класичних hexspeak-константах, перелічених вище. Всі ці константи використовують всю ширину машинного слова (у даному випадку 32-бітовго), і жодне з них не починається з 1 або 5. Такий вибір означає, що якщо слово інтерпретувати як ціле число в десятковому запису, то це зазвичай велике від'ємне ціле. Використовуване компанією Microsoft значення 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. 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. Архів оригіналу за 2 липня 2012. Процитовано 1 жовтня 2009.
  5. Yet Another Gamecube Documentation: Dolphin-OS Globals. Архів оригіналу за 2 липня 2012.
  6. Wiibrew: Memory Map. Архів оригіналу за 2 липня 2012.
  7. DEADBABE sanity check. Архів оригіналу за 2 липня 2012. Процитовано 1 жовтня 2009.
  8. Jargon File entry for DEADBEEF. Catb.org. Архів оригіналу за 2 липня 2012. Процитовано 1 жовтня 2009.
  9. Bug Check 0xDEADDEAD: MANUALLY_INITIATED_CRASH, MSDN. msdn.microsoft.com. 1 жовтня 2009. Архів оригіналу за 2 липня 2012. Процитовано 13 жовтня 2009.
  10. Bug Check 0xE2: MANUALLY_INITIATED_CRASH, MSDN. msdn.microsoft.com. 1 жовтня 2009. Архів оригіналу за 2 липня 2012. Процитовано 13 жовтня 2009.
  11. Opensolaris header line 48 for 0xDEFEC8ED. Cvs.opensolaris.org. Архів оригіналу за 2 липня 2012. Процитовано 1 жовтня 2009.
  12. Technet article for 0xFACEFEED. Support.microsoft.com. 1 листопада 2006. Архів оригіналу за 2 липня 2012. Процитовано 1 жовтня 2009.
  13. include/linux/reboot.h. Архів оригіналу за 2 липня 2012.
  14. Documents That Are Supported by the Office Filter. Архів оригіналу за 2 липня 2012.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.