---
title: "Магическое число (программирование)"
type: "antipattern"
slug: "magic-number"
url: "http://localhost:3000/ru/antipatterns/magic-number.md"
description: "Числовое значение с неясным смыслом"
---
# Магическое число (программирование)

> Числовое значение с неясным смыслом

В [программировании](https://en.wikipedia.org/wiki/Computer%5Fprogramming "Computer programming") **магическое число** или **сигнатура файла** — это [числовой](https://en.wikipedia.org/wiki/Numeric "Numeric") [литерал](https://en.wikipedia.org/wiki/Literal%5F%28computer%5Fprogramming%29 "Literal (computer programming)") в [исходном коде](https://en.wikipedia.org/wiki/Source%5Fcode "Source code"), который имеет особое, конкретное значение, не вполне очевидное для читателя. Также в [вычислительной технике](https://en.wikipedia.org/wiki/Computing "Computing"), но не только в программировании, этим термином называют число, идентифицирующее определённое понятие, смысл которого без дополнительных знаний остаётся неясным. Например, некоторые [форматы файлов](https://en.wikipedia.org/wiki/File%5Fformat "File format") распознаются по встроенному магическому числу в самом [файле](https://en.wikipedia.org/wiki/Computer%5Ffile "Computer file")). Кроме того, число, относительно однозначно связанное с определённым понятием, например [универсальный уникальный идентификатор](https://en.wikipedia.org/wiki/Universally%5Funique%5Fidentifier "Universally unique identifier"), также может быть отнесено к магическим числам.

## Числовой литерал

**Магическое число** или **магическая константа** — это числовой [литерал](https://en.wikipedia.org/wiki/Literal%5F%28computer%5Fprogramming%29 "Literal (computer programming)") в исходном коде, имеющий особое значение, которое не вполне ясно из контекста. Это считается [антипаттерном](https://en.wikipedia.org/wiki/Anti-pattern "Anti-pattern") и нарушает одно из старейших правил программирования, восходящее к руководствам по [COBOL](https://en.wikipedia.org/wiki/COBOL "COBOL"), [FORTRAN](https://en.wikipedia.org/wiki/FORTRAN "FORTRAN") и [PL/1](https://en.wikipedia.org/wiki/PL/1 "PL/1") 1960-х годов.

Например, в следующем коде, вычисляющем цену с учётом налога, `1.05` является магическим числом, поскольку это значение неочевидным образом кодирует ставку налога с продаж, равную 5 %.

price_after_tax = 1.05 * price

Использование магических чисел в коде скрывает намерения разработчиков при выборе этого числа, увеличивает вероятность незаметных ошибок и затрудняет дальнейшую адаптацию и расширение программы. Например, трудно определить, верно ли набрана каждая цифра в `3.14159265358979323846`, или же эту константу для [числа пи](https://en.wikipedia.org/wiki/Pi "Pi") можно [усечь](https://en.wikipedia.org/wiki/Truncation "Truncation") до `3.14159` без ущерба для работы программы при пониженной точности. Замена всех значимых магических чисел именованными [константами](https://en.wikipedia.org/wiki/Constant%5F%28programming%29 "Constant (programming)") (которые также называют поясняющими переменными) делает программы более простыми для чтения, понимания и сопровождения.

Приведённый выше пример можно улучшить, добавив переменную с описательным именем:

TAX = 0.05
price_after_tax = (1.0 + TAX) * price

Удачное имя позволяет получить код, который легче понять сопровождающему разработчику, не являющемуся автором, и даже самому автору спустя некоторое время. Пример неинформативно названной константы — `int SIXTEEN = 16`, тогда как `int NUMBER_OF_BITS = 16` может оказаться более полезным.

Нечисловые данные могут обладать теми же «магическими» свойствами, а значит, и теми же проблемами, что и магические числа. Так, объявление `const string testUserName = "John"` и использование `testUserName` может быть предпочтительнее, чем использование литерала `"John"` напрямую.

### Пример

Например, если требуется случайным образом перемешать значения в массиве, представляющем стандартную колоду [игральных карт](https://en.wikipedia.org/wiki/Playing%5Fcards "Playing cards"), этот [псевдокод](https://en.wikipedia.org/wiki/Pseudocode "Pseudocode") решает задачу с помощью алгоритма [тасования Фишера — Йейтса](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates%5Fshuffle "Fisher–Yates shuffle"):

**for** i **from** 1 **to** 52
    j := i + randomInt(53 - i) - 1
    a.swapEntries(i, j)

где `a` — объект-массив, функция `randomInt(x)` выбирает случайное целое число от 1 до _x_ включительно, а `swapEntries(i, j)` меняет местами _i_\-й и _j_\-й элементы массива. В предыдущем примере `52` и `53` — магические числа, к тому же явно не связанные друг с другом. Считается, что лучше писать так:

_int_ deckSize:= 52
**for** i **from** 1 **to** deckSize
    j := i + randomInt(deckSize + 1 - i) - 1
    a.swapEntries(i, j)

Это предпочтительнее по нескольким причинам:

* **Лучшая читаемость**. Программист, читающий первый пример, может задаться вопросом: _что здесь означает число 52? Почему 52?_ Он может понять смысл, внимательно прочитав код, но это неочевидно. Магические числа становятся особенно запутанными, когда одно и то же число используется для разных целей в одном фрагменте кода.
* **Проще в сопровождении**. Изменить значение числа легче, поскольку оно не дублируется. Изменение значения магического числа чревато ошибками, потому что одно и то же значение часто используется несколько раз в разных местах программы. Кроме того, когда две семантически различные переменные или числа имеют одно и то же значение, их могут случайно отредактировать вместе. Чтобы изменить первый пример для тасования колоды [Таро](https://en.wikipedia.org/wiki/Tarot "Tarot"), в которой 78 карт, программист может наивно заменить каждое вхождение 52 в программе на 78\. Это привело бы к двум проблемам. Во-первых, было бы пропущено значение 53 во второй строке примера, из-за чего алгоритм незаметно дал бы сбой. Во-вторых, скорее всего, символы «52» были бы заменены повсюду, независимо от того, обозначают ли они размер колоды или нечто совершенно иное, например число недель в григорианском календарном году, или, что ещё коварнее, являются частью числа вроде «1523», — и всё это внесло бы ошибки. Напротив, изменение значения переменной `deckSize` во втором примере было бы простым изменением в одну строку.
* **Поощряет документирование**. Единственное место, где объявляется именованная переменная, — удачное место, чтобы задокументировать, что означает это значение и почему оно именно такое. Наличие одного и того же значения во множестве мест либо приводит к дублированию комментариев (и сопутствующим проблемам, когда часть из них обновляют, а часть упускают), либо не оставляет _ни одного_ места, где автору было бы естественно объяснить значение и где читатель, вероятно, станет искать объяснение.
* **Объединяет информацию**. Объявления переменных-«магических чисел» можно разместить вместе, обычно в начале функции или файла, что упрощает их просмотр и изменение.
* **Обнаруживает [опечатки](https://en.wikipedia.org/wiki/Typo "Typo")**. Использование переменной (вместо литерала) задействует проверку компилятора. Случайно набранное «62» вместо «52» осталось бы незамеченным, тогда как набранное «`dekSize`» вместо «`deckSize`» привело бы к предупреждению компилятора о том, что `dekSize` не объявлена.
* **Сокращает набор текста**. Если [IDE](https://en.wikipedia.org/wiki/Integrated%5Fdevelopment%5Fenvironment "Integrated development environment") поддерживает [автодополнение кода](https://en.wikipedia.org/wiki/Code%5Fcompletion "Code completion"), она подставит большую часть имени переменной по первым нескольким буквам.
* **Облегчает параметризацию**. Например, чтобы обобщить приведённый выше пример в процедуру, тасующую колоду из любого числа карт, достаточно превратить `deckSize` в параметр этой процедуры, тогда как первый пример потребовал бы нескольких изменений.

**function** shuffle (**int** deckSize)
   **for** i **from** 1 **to** deckSize
       j := i + randomInt(deckSize + 1 - i) - 1
       a.swapEntries(i, j)

Недостатки:

* **Нарушает локальность**. Когда именованная константа определена не рядом с местом её использования, это вредит локальности, а значит, и понятности кода. Размещение 52 в потенциально отдалённом месте означает, что для полного понимания работы цикла «for» (например, чтобы оценить время его выполнения) приходится разыскивать определение и проверять, что это ожидаемое число. Этого легко избежать (перенеся объявление), когда константа используется лишь в одной части кода. Когда же именованная константа используется в разрозненных частях, отдалённое местоположение служит читателю подсказкой, что то же значение встречается и в других местах кода, которые, возможно, тоже стоит изучить.
* **Приводит к многословию**. Объявление константы добавляет строку. Когда имя константы длиннее её значения, особенно если несколько таких констант появляются в одной строке, может потребоваться разбить один логический оператор кода на несколько строк. Увеличение многословия может быть оправдано, когда есть вероятность путаницы относительно константы или когда константу, возможно, придётся изменить, например при [повторном использовании](https://en.wikipedia.org/wiki/Code%5Freuse "Code reuse") процедуры тасования для других карточных игр. Оно может быть в равной мере оправдано как повышение выразительности.
* **Соображения производительности**. Обработка выражения `deckSize + 1` во время выполнения может быть медленнее, чем использование значения «53». Тем не менее большинство современных компиляторов применяют такие методы, как [свёртка констант](https://en.wikipedia.org/wiki/Constant%5Ffolding "Constant folding") и [оптимизация циклов](https://en.wikipedia.org/wiki/Loop%5Foptimization "Loop optimization"), чтобы вычислить сложение при компиляции, поэтому по сравнению с использованием магических чисел в коде потери в скорости обычно отсутствуют или пренебрежимо малы. В особенности стоимость отладки и время, затрачиваемое на попытки понять не поясняющий код, нужно сопоставлять с ничтожной стоимостью вычисления.

### Допустимое использование

Когда числовой литерал не несёт особого смысла, его использование не считается «магическим», хотя то, что считать особым, субъективно. Примеры литералов, которые часто не считают магическими:

* Использование 0 и 1 в качестве начальных или приращиваемых значений в [цикле for](https://en.wikipedia.org/wiki/For%5Floop "For loop"), например `for (int i = 0; i < max; i += 1)`
* Использование 2 для проверки чётности числа, как в `isEven = (x % 2 == 0)`, где `%` — оператор [взятия остатка](https://en.wikipedia.org/wiki/Modulo "Modulo")
* Использование простых литералов, например в выражениях вроде `circumference = 2 * Math.PI * radius`, или для вычисления [дискриминанта](https://en.wikipedia.org/wiki/Discriminant "Discriminant") [квадратного уравнения](https://en.wikipedia.org/wiki/Quadratic%5Fequation "Quadratic equation") как `d = b^2 − 4*a*c`
* Использование степеней 10 для перевода метрических величин (например, между граммами и килограммами) или для вычисления процентов и значений в [промилле](https://en.wikipedia.org/wiki/Per%5Fmille "Per mille")
* Показатели степени в выражениях вроде `(f(x) ** 2 + f(y) ** 2) ** 0.5` для f ( x ) 2 + f ( y ) 2 {\\displaystyle {\\sqrt {f(x)^{2}+f(y)^{2}}}}
* Литералы 1 и 0 иногда используют для представления [булевых](https://en.wikipedia.org/wiki/Boolean%5Fdata%5Ftype "Boolean data type") значений true и false. Возможно, присваивание этих значений именам вроде TRUE и FALSE было бы лучше.
* В C и C++ 0 часто используется для обозначения [нулевого указателя](https://en.wikipedia.org/wiki/Null%5Fpointer "Null pointer"), хотя стандартная библиотека C определяет макрос `NULL`, а современный C++ включает ключевое слово `nullptr`.

## Индикатор формата

### Происхождение

Индикаторы формата впервые использовались в раннем исходном коде [Version 7 Unix](https://en.wikipedia.org/wiki/Version%5F7%5FUnix "Version 7 Unix").

[Unix](https://en.wikipedia.org/wiki/Unix "Unix") был перенесён на одну из первых машин [DEC](https://en.wikipedia.org/wiki/Digital%5FEquipment%5FCorporation "Digital Equipment Corporation") [PDP-11](https://en.wikipedia.org/wiki/PDP-11 "PDP-11")/20, не имевшую [защиты памяти](https://en.wikipedia.org/wiki/Memory%5Fprotection "Memory protection"). Поэтому ранние версии Unix использовали модель [перемещаемых ссылок на память](https://en.wikipedia.org/wiki/Position-independent%5Fcode "Position-independent code"). Версии Unix до [Sixth Edition](https://en.wikipedia.org/wiki/Sixth%5FEdition%5FUnix "Sixth Edition Unix") считывали исполняемый файл в [память](https://en.wikipedia.org/wiki/Magnetic-core%5Fmemory "Magnetic-core memory") и переходили к первому младшему адресу программы — [относительному адресу](https://en.wikipedia.org/wiki/Relative%5Faddress "Relative address") ноль. С разработкой [страничных](https://en.wikipedia.org/wiki/Memory%5Fpage "Memory page") версий Unix был создан [заголовок](https://en.wikipedia.org/wiki/Header%5F%28computing%29 "Header (computing)") для описания компонентов [исполняемого образа](https://en.wikipedia.org/wiki/Executable "Executable"). Кроме того, первым словом заголовка вставлялась [команда перехода](https://en.wikipedia.org/wiki/Branch%5Finstruction "Branch instruction"), чтобы пропустить заголовок и начать выполнение программы. Таким образом, программа могла выполняться как в старом режиме перемещаемых ссылок на память (обычном), так и в страничном режиме. По мере разработки новых форматов исполняемых файлов добавлялись новые константы путём увеличения [смещения](https://en.wikipedia.org/wiki/Offset%5F%28computer%5Fscience%29 "Offset (computer science)") перехода.

В [исходном коде](https://en.wikipedia.org/wiki/Version%5F6%5FUnix "Version 6 Unix") [Sixth Edition](https://en.wikipedia.org/wiki/Lions%27%5FCommentary%5Fon%5FUNIX%5F6th%5FEdition,%5Fwith%5FSource%5FCode "Lions' Commentary on UNIX 6th Edition, with Source Code") загрузчика программ Unix функция exec() считывала исполняемый ([двоичный](https://en.wikipedia.org/wiki/Binary%5Fnumeral%5Fsystem "Binary numeral system")) образ из файловой системы. Первые 8 [байт](https://en.wikipedia.org/wiki/Byte "Byte") файла составляли [заголовок](https://en.wikipedia.org/wiki/Header%5F%28computing%29 "Header (computing)"), содержащий размеры областей программы (текста) и инициализированных (глобальных) данных. Кроме того, первое 16-битное слово заголовка сравнивалось с двумя [константами](https://en.wikipedia.org/wiki/Constant%5F%28programming%29 "Constant (programming)"), чтобы определить, содержит ли [исполняемый образ](https://en.wikipedia.org/wiki/Executable "Executable") [перемещаемые ссылки на память](https://en.wikipedia.org/wiki/Position-independent%5Fcode "Position-independent code") (обычный), недавно реализованный [страничный](https://en.wikipedia.org/wiki/Memory%5Fpage "Memory page") образ только для чтения или образ с раздельными страницами команд и данных. О двойной роли константы заголовка не упоминалось, но старший байт константы фактически был [кодом операции](https://en.wikipedia.org/wiki/Operation%5Fcode "Operation code") команды перехода PDP-11 ([восьмеричное](https://en.wikipedia.org/wiki/Octal "Octal") 000407 или [шестнадцатеричное](https://en.wikipedia.org/wiki/Hexadecimal "Hexadecimal") 0107). Прибавление семёрки к счётчику команд показывало, что если эта константа будет выполнена, она направит службу exec() Unix за восьмибайтовый заголовок исполняемого образа и запустит программу.

Поскольку Sixth и Seventh Edition Unix использовали страничный код, двойная роль константы заголовка была скрыта. То есть служба exec() считывала ([мета](https://en.wikipedia.org/wiki/Meta%5F%28prefix%29 "Meta (prefix)"))данные заголовка исполняемого файла в буфер [пространства ядра](https://en.wikipedia.org/wiki/Kernel%5Fspace "Kernel space"), но сам исполняемый образ читала в [пространство пользователя](https://en.wikipedia.org/wiki/User%5Fspace "User space"), тем самым не используя функцию перехода константы. Создание магического числа было реализовано в [компоновщике](https://en.wikipedia.org/wiki/Linker%5F%28computing%29 "Linker (computing)") и [загрузчике](https://en.wikipedia.org/wiki/Loader%5F%28computing%29 "Loader (computing)") Unix, а переход по магическому числу, вероятно, всё ещё использовался в наборе [автономных](https://en.wikipedia.org/wiki/Standalone%5Fprogram "Standalone program") [диагностических программ](https://en.wikipedia.org/wiki/Diagnostic%5Fprogram "Diagnostic program"), поставлявшихся с Sixth и Seventh Edition. Таким образом, константа заголовка создавала иллюзию и отвечала критериям [магии](https://en.wikipedia.org/wiki/Magic%5F%28programming%29 "Magic (programming)").

В Version Seven Unix константа заголовка не проверялась напрямую, а присваивалась переменной с меткой **ux\_mag** и впоследствии называлась **магическим числом**. Вероятно, из-за своей уникальности термин **магическое число** стал означать тип формата исполняемого файла, затем расширился до типа файловой системы, а потом снова — до любого типа файла.

### В файлах

Магические числа распространены в программах во многих операционных системах. Магические числа реализуют [строго типизированные](https://en.wikipedia.org/wiki/Strongly%5Ftyped "Strongly typed") данные и являются формой [внутриполосной сигнализации](https://en.wikipedia.org/wiki/In-band%5Fsignaling "In-band signaling") управляющей программе, которая считывает тип(ы) данных во время выполнения. Многие файлы содержат такие константы, идентифицирующие хранящиеся в них данные. Обнаружение таких констант в файлах — простой и эффективный способ различать многие [форматы файлов](https://en.wikipedia.org/wiki/File%5Fformat "File format"), который может дать и дополнительную [информацию](https://en.wikipedia.org/wiki/Information "Information") о времени выполнения.

Примеры

* [Скомпилированные](https://en.wikipedia.org/wiki/Compiler "Compiler") [файлы классов Java](https://en.wikipedia.org/wiki/Java%5Fclass%5Ffile "Java class file") ([байт-код](https://en.wikipedia.org/wiki/Java%5Fbytecode "Java bytecode")) и двоичные файлы [Mach-O](https://en.wikipedia.org/wiki/Mach%5F%28kernel%29 "Mach (kernel)") начинаются с шестнадцатеричного `CA FE BA BE`. При сжатии с помощью [Pack200](https://en.wikipedia.org/wiki/Pack200 "Pack200") байты меняются на `CA FE D0 0D`.
* Файлы изображений [GIF](https://en.wikipedia.org/wiki/GIF "GIF") содержат [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII")\-код строки "GIF89a" (`47 49 46 38 39 61`) или "GIF87a" (`47 49 46 38 37 61`)
* Файлы изображений [JPEG](https://en.wikipedia.org/wiki/JPEG "JPEG") начинаются с `FF D8` и заканчиваются `FF D9`. Файлы JPEG/[JFIF](https://en.wikipedia.org/wiki/JFIF "JFIF") содержат [строку с завершающим нулём](https://en.wikipedia.org/wiki/Null-terminated%5Fstring "Null-terminated string") "JFIF" (`4A 46 49 46 00`). Файлы JPEG/[Exif](https://en.wikipedia.org/wiki/Exif "Exif") содержат [строку с завершающим нулём](https://en.wikipedia.org/wiki/Null-terminated%5Fstring "Null-terminated string") "Exif" (`45 78 69 66 00`), за которой следуют другие [метаданные](https://en.wikipedia.org/wiki/Metadata%5F%28computing%29 "Metadata (computing)") о файле.
* Файлы изображений [PNG](https://en.wikipedia.org/wiki/PNG "PNG") начинаются с 8-[байтовой](https://en.wikipedia.org/wiki/Byte "Byte") сигнатуры, которая идентифицирует файл как PNG и позволяет обнаружить распространённые проблемы передачи файлов: "\\211PNG\\r\\n\\032\\n" (`89 50 4E 47 0D 0A 1A 0A`). Эта сигнатура содержит различные символы [перевода строки](https://en.wikipedia.org/wiki/Newline "Newline"), позволяющие обнаружить нежелательные автоматические преобразования переводов строк, например при передаче файла по [FTP](https://en.wikipedia.org/wiki/File%5FTransfer%5FProtocol "File Transfer Protocol") в _текстовом_ [режиме передачи](https://en.wikipedia.org/wiki/File%5FTransfer%5FProtocol#Protocol%5Foverview "File Transfer Protocol") вместо _двоичного_.
* Стандартные аудиофайлы [MIDI](https://en.wikipedia.org/wiki/MIDI "MIDI") содержат [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII")\-код строки "MThd" (**M**IDI **T**rack **h**ea**d**er, `4D 54 68 64`), за которым следуют другие метаданные.
* Скрипты [Unix](https://en.wikipedia.org/wiki/Unix "Unix") или [Linux](https://en.wikipedia.org/wiki/Linux "Linux") могут начинаться с [shebang](https://en.wikipedia.org/wiki/Shebang%5F%28Unix%29 "Shebang (Unix)") ("#!", `23 21`), за которым следует путь к [интерпретатору](https://en.wikipedia.org/wiki/Interpreter%5Fdirective "Interpreter directive"), если интерпретатор, вероятно, отличается от того, из которого был вызван скрипт.
* Исполняемые файлы [ELF](https://en.wikipedia.org/wiki/Executable%5Fand%5FLinkable%5FFormat "Executable and Linkable Format") начинаются с байта `7F`, за которым следует "ELF" (`7F 45 4C 46`).
* Файлы и программы [PostScript](https://en.wikipedia.org/wiki/PostScript "PostScript") начинаются с "%!" (`25 21`).
* Файлы [PDF](https://en.wikipedia.org/wiki/PDF "PDF") начинаются с "%PDF" (шестнадцатеричное `25 50 44 46`).
* Файлы [DOS MZ executable](https://en.wikipedia.org/wiki/DOS%5FMZ%5Fexecutable "DOS MZ executable") и [EXE-заглушка](https://en.wikipedia.org/wiki/EXE#Other "EXE") файлов [PE](https://en.wikipedia.org/wiki/Portable%5FExecutable "Portable Executable") (Portable Executable) [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft%5FWindows "Microsoft Windows") начинаются с символов "MZ" (`4D 5A`) — инициалов создателя формата файла, [Марка Збиковски](https://en.wikipedia.org/wiki/Mark%5FZbikowski "Mark Zbikowski"). Определение допускает и нечасто встречающееся "ZM" (`5A 4D`) для dosZMXP, не-PE EXE.
* Формат суперблока [Berkeley Fast File System](https://en.wikipedia.org/wiki/Berkeley%5FFast%5FFile%5FSystem "Berkeley Fast File System") идентифицируется как `19 54 01 19` или `01 19 54` в зависимости от версии; оба представляют дату рождения автора, [Маршалла Кирка Маккьюсика](https://en.wikipedia.org/wiki/Marshall%5FKirk%5FMcKusick "Marshall Kirk McKusick").
* [Главная загрузочная запись](https://en.wikipedia.org/wiki/Master%5FBoot%5FRecord "Master Boot Record") загрузочных накопителей практически на всех [IA-32](https://en.wikipedia.org/wiki/IA-32 "IA-32") [IBM PC-совместимых](https://en.wikipedia.org/wiki/IBM%5FPC%5Fcompatible "IBM PC compatible") компьютерах имеет код `55 AA` в качестве двух последних байт.
* Исполняемые файлы для портативных игровых систем [Game Boy](https://en.wikipedia.org/wiki/Game%5FBoy "Game Boy") и [Game Boy Advance](https://en.wikipedia.org/wiki/Game%5FBoy%5FAdvance "Game Boy Advance") имеют магическое число длиной 48 или 156 байт соответственно в фиксированном месте заголовка. Это магическое число кодирует растровое изображение логотипа [Nintendo](https://en.wikipedia.org/wiki/Nintendo "Nintendo").
* Исполняемые [Hunk](https://en.wikipedia.org/wiki/Amiga%5FHunk "Amiga Hunk")\-файлы программ [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga"), работающие на классических машинах Amiga [68000](https://en.wikipedia.org/wiki/68000 "68000"), все начинались с шестнадцатеричного числа $000003f3, прозванного "Magic Cookie".
* В Amiga единственный абсолютный адрес в системе — шестнадцатеричный $0000 0004 (ячейка памяти 4), который содержит начальный адрес под названием SysBase — указатель на exec.library, так называемое [ядро](https://en.wikipedia.org/wiki/Kernel%5F%28operating%5Fsystem%29 "Kernel (operating system)") Amiga.
* Файлы [PEF](https://en.wikipedia.org/wiki/Preferred%5FExecutable%5FFormat "Preferred Executable Format"), используемые [классической Mac OS](https://en.wikipedia.org/wiki/Classic%5FMac%5FOS "Classic Mac OS") и [BeOS](https://en.wikipedia.org/wiki/BeOS "BeOS") для исполняемых файлов [PowerPC](https://en.wikipedia.org/wiki/PowerPC "PowerPC"), содержат [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII")\-код строки "Joy!" (`4A 6F 79 21`) в качестве префикса.
* Файлы [TIFF](https://en.wikipedia.org/wiki/TIFF "TIFF") начинаются с "II" или "MM", за которыми следует [42](https://en.wikipedia.org/wiki/Answer%5Fto%5FLife,%5Fthe%5FUniverse,%5Fand%5FEverything "Answer to Life, the Universe, and Everything") в виде двухбайтового целого с порядком байтов [от младшего или старшего](https://en.wikipedia.org/wiki/Endianness "Endianness"). "II" — для Intel, использующего порядок [от младшего байта](https://en.wikipedia.org/wiki/Endianness "Endianness"), поэтому магическое число — `49 49 2A 00`. "MM" — для Motorola, использующей порядок [от старшего байта](https://en.wikipedia.org/wiki/Endianness "Endianness"), поэтому магическое число — `4D 4D 00 2A`.
* Текстовые файлы [Unicode](https://en.wikipedia.org/wiki/Unicode "Unicode"), закодированные в [UTF-16](https://en.wikipedia.org/wiki/UTF-16 "UTF-16"), часто начинаются с [метки порядка байтов](https://en.wikipedia.org/wiki/Byte%5FOrder%5FMark "Byte Order Mark") для определения [порядка байтов](https://en.wikipedia.org/wiki/Endianness "Endianness") (`FE FF` для старшего байта и `FF FE` для младшего). А в [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft%5FWindows "Microsoft Windows") текстовые файлы [UTF-8](https://en.wikipedia.org/wiki/UTF-8 "UTF-8") часто начинаются с кодировки UTF-8 того же символа — `EF BB BF`.
* Файлы [LLVM](https://en.wikipedia.org/wiki/LLVM "LLVM") Bitcode начинаются с "BC" (`42 43`).
* Файлы [WAD](https://en.wikipedia.org/wiki/Doom%5FWAD "Doom WAD") начинаются с "IWAD" или "PWAD" (для _[Doom](https://en.wikipedia.org/wiki/Doom%5F%281993%5Fvideo%5Fgame%29 "Doom (1993 video game)")_), "WAD2" (для _[Quake](https://en.wikipedia.org/wiki/Quake%5F%28video%5Fgame%29 "Quake (video game)")_) и "WAD3" (для _[Half-Life](https://en.wikipedia.org/wiki/Half-Life%5F%28video%5Fgame%29 "Half-Life (video game)")_).
* Файлы [Compound File Binary Format](https://en.wikipedia.org/wiki/Compound%5FFile%5FBinary%5FFormat "Compound File Binary Format") от Microsoft (наиболее известного как один из старых форматов документов [Microsoft Office](https://en.wikipedia.org/wiki/Microsoft%5FOffice "Microsoft Office")) начинаются с `D0 CF 11 E0`, что визуально напоминает слово "DOCFILE0".
* Заголовки в [ZIP](https://en.wikipedia.org/wiki/ZIP%5F%28file%5Fformat%29 "ZIP (file format)")\-файлах часто отображаются в текстовых редакторах как "PK♥♦" (`50 4B 03 04`), где "PK" — инициалы [Фила Каца](https://en.wikipedia.org/wiki/Phil%5FKatz "Phil Katz"), автора [DOS](https://en.wikipedia.org/wiki/DOS "DOS")\-утилиты сжатия [PKZIP](https://en.wikipedia.org/wiki/PKZIP "PKZIP").
* Заголовки в [7z](https://en.wikipedia.org/wiki/7z "7z")\-файлах начинаются с "7z" (полное магическое число: `37 7A BC AF 27 1C`).

Обнаружение

Утилита Unix `[file](https://en.wikipedia.org/wiki/File%5F%28command%29 "File (command)")` может считывать и интерпретировать магические числа из файлов, а файл, используемый для разбора этой информации, называется _magic_. Утилита Windows TrID имеет схожее назначение.

### В протоколах

Примеры

* [Протокол OSCAR](https://en.wikipedia.org/wiki/OSCAR%5Fprotocol "OSCAR protocol"), используемый в [AIM](https://en.wikipedia.org/wiki/AOL%5FInstant%5FMessenger "AOL Instant Messenger")/[ICQ](https://en.wikipedia.org/wiki/ICQ "ICQ"), предваряет запросы байтом `2A`.
* В [протоколе RFB](https://en.wikipedia.org/wiki/RFB%5Fprotocol "RFB protocol"), используемом [VNC](https://en.wikipedia.org/wiki/VNC "VNC"), клиент начинает обмен с сервером, отправляя "RFB" (`52 46 42`, от "Remote Frame Buffer"), за которым следует номер версии протокола клиента.
* В протоколе [SMB](https://en.wikipedia.org/wiki/Server%5FMessage%5FBlock "Server Message Block"), используемом Microsoft Windows, каждый запрос SMB или ответ сервера начинается с `FF 53 4D 42`, или `\xFFSMB` в начале запроса SMB.
* В протоколе [MSRPC](https://en.wikipedia.org/wiki/MSRPC "MSRPC"), используемом Microsoft Windows, каждый запрос на основе TCP начинается с `05` в начале запроса (что представляет Microsoft DCE/RPC версии 5), за которым сразу следует `00` или `01` для младшей версии. В запросах MSRPC на основе UDP первый байт всегда `04`.
* В маршалированных интерфейсах [COM](https://en.wikipedia.org/wiki/Component%5FObject%5FModel "Component Object Model") и [DCOM](https://en.wikipedia.org/wiki/Distributed%5FComponent%5FObject%5FModel "Distributed Component Object Model"), называемых [OBJREF](https://en.wikipedia.org/wiki/OBJREF "OBJREF"), всегда начинаются с последовательности байтов "MEOW" (`4D 45 4F 57`). Отладочные расширения (используемые для перехвата канала DCOM) предваряются последовательностью байтов "MARB" (`4D 41 52 42`).
* Незашифрованные запросы к [BitTorrent-трекеру](https://en.wikipedia.org/wiki/BitTorrent%5Ftracker "BitTorrent tracker") начинаются с одного байта со значением `19`, представляющего длину заголовка, за которым сразу следует фраза "BitTorrent protocol" в позиции байта 1.
* Трафик [eDonkey2000](https://en.wikipedia.org/wiki/EDonkey2000 "EDonkey2000")/[eMule](https://en.wikipedia.org/wiki/EMule "EMule") начинается с одного байта, представляющего версию клиента. В настоящее время `E3` представляет клиент eDonkey, `C5` — eMule, а `D4` — сжатый eMule.
* Первые 4 байта блока в блокчейне [Bitcoin](https://en.wikipedia.org/wiki/Bitcoin "Bitcoin") содержат магическое число, служащее идентификатором сети. Значение `D9 B4 BE F9` указывает на основную сеть, тогда как `DA B5 BF FA` указывает на тестовую сеть.
* Транзакции [SSL](https://en.wikipedia.org/wiki/Secure%5FSockets%5FLayer "Secure Sockets Layer") всегда начинаются с сообщения "client hello". Схема инкапсуляции записей, используемая для префикса всех пакетов SSL, состоит из двух- и трёхбайтовых форм заголовка. Обычно сообщение client hello SSL версии 2 предваряется байтом `80`, а ответ сервера SSLv3 на client hello начинается с `16` (хотя это может варьироваться).
* Пакеты [DHCP](https://en.wikipedia.org/wiki/DHCP "DHCP") используют значение "magic cookie" `63 82 53 63` в начале секции параметров пакета. Это значение включается во все типы пакетов DHCP.
* Соединения [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2 "HTTP/2") начинаются с 24-символьной строки `PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n`. Она призвана предотвратить обработку кадров серверами и посредниками, которые поддерживают более ранние версии HTTP, но не 2.0.
* [Рукопожатие при открытии WebSocket](https://en.wikipedia.org/wiki/WebSocket#Opening%5Fhandshake "WebSocket") использует строку, содержащую [UUIDv4](https://en.wikipedia.org/wiki/UUIDv4 "UUIDv4") `258EAFA5-E914-47DA-95CA-C5AB0DC85B11`.

### В интерфейсах

Магические числа распространены в [функциях API](https://en.wikipedia.org/wiki/API%5Ffunction "API function") и [интерфейсах](https://en.wikipedia.org/wiki/Interface%5F%28computing%29 "Interface (computing)") во многих [операционных системах](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system"), включая [DOS](https://en.wikipedia.org/wiki/DOS "DOS"), [Windows](https://en.wikipedia.org/wiki/Windows "Windows") и [NetWare](https://en.wikipedia.org/wiki/NetWare "NetWare"):

Примеры

* [IBM PC](https://en.wikipedia.org/wiki/IBM%5FPC "IBM PC")\-совместимые [BIOS](https://en.wikipedia.org/wiki/BIOS "BIOS") используют магические значения `00 00` и `12 34`, чтобы решить, нужно ли при перезагрузке пересчитывать память, выполняя тем самым холодную или горячую загрузку. Эти значения также используются менеджерами памяти [EMM386](https://en.wikipedia.org/wiki/EMM386 "EMM386"), перехватывающими запросы на загрузку. BIOS также используют магические значения `55 AA`, чтобы определить, является ли диск загрузочным.
* Дисковый кэш [MS-DOS](https://en.wikipedia.org/wiki/MS-DOS "MS-DOS") [SMARTDRV](https://en.wikipedia.org/wiki/SMARTDRV "SMARTDRV") (с кодовым названием "Bambi") использует магические значения `BA BE` и `EB AB` в функциях API.
* Многие драйверы [DR-DOS](https://en.wikipedia.org/wiki/DR-DOS "DR-DOS"), [Novell DOS](https://en.wikipedia.org/wiki/Novell%5FDOS "Novell DOS") и [OpenDOS](https://en.wikipedia.org/wiki/OpenDOS "OpenDOS"), разработанные в бывшем _European Development Centre_ в Великобритании, используют значение `0E DC` в качестве магического токена при вызове или предоставлении дополнительной функциональности поверх (эмулируемых) стандартных функций DOS, одним из примеров чего является NWCACHE.

### Другие применения

Примеры

* [MAC-адрес](https://en.wikipedia.org/wiki/MAC%5Faddress "MAC address") по умолчанию на [системах на кристалле](https://en.wikipedia.org/wiki/System%5Fon%5Fa%5Fchip "System on a chip") Texas Instruments — `DE:AD:BE:EF:00:00`.

## GUID

Можно создать или изменить [глобально уникальные идентификаторы](https://en.wikipedia.org/wiki/Globally%5Funique%5Fidentifier "Globally unique identifier") (GUID) так, чтобы они были запоминающимися, но это крайне не рекомендуется, поскольку подрывает их надёжность как почти уникальных идентификаторов. Спецификации генерации GUID и UUID довольно сложны, что и приводит к их виртуальной уникальности при правильной реализации.

Идентификаторы продуктов Microsoft Windows для продуктов [Microsoft Office](https://en.wikipedia.org/wiki/Microsoft%5FOffice "Microsoft Office") иногда заканчиваются на `0000-0000-0000000FF1CE` ("OFFICE"), например `90160000-008C-0000-0000-0000000FF1CE` — идентификатор продукта "Office 16 Click-to-Run Extensibility Component".

Java использует несколько GUID, начинающихся с `CAFEEFAC`.

В [таблице разделов GUID](https://en.wikipedia.org/wiki/GUID%5FPartition%5FTable "GUID Partition Table") схемы разметки GPT [загрузочные разделы BIOS](https://en.wikipedia.org/wiki/BIOS%5FBoot%5Fpartition "BIOS Boot partition") используют специальный GUID `21686148-6449-6E6F-744E-656564454649`, который не следует определению GUID; вместо этого он образован из [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII")\-кодов строки `Hah!IdontNeedEFI`, частично в порядке [от младшего байта](https://en.wikipedia.org/wiki/Little%5Fendian "Little endian").

## Отладочное значение

**Магические отладочные значения** — это специальные значения, записываемые в [память](https://en.wikipedia.org/wiki/Random-access%5Fmemory "Random-access memory") во время [выделения](https://en.wikipedia.org/wiki/Memory%5Fallocation "Memory allocation") или освобождения, чтобы впоследствии можно было определить, не были ли они повреждены, и сделать очевидным использование значений из неинициализированной памяти. Память обычно просматривают в шестнадцатеричном виде, поэтому распространены запоминающиеся повторяющиеся значения или значения в стиле [hexspeak](https://en.wikipedia.org/wiki/Hexspeak "Hexspeak"). Могут предпочитаться численно нечётные значения, чтобы процессоры без побайтовой адресации давали сбой при попытке использовать их как указатели (которые должны попадать на чётные адреса). Следует выбирать значения, далёкие от вероятных адресов (кода программы, статических данных, данных кучи или стека). Аналогично их могут выбирать так, чтобы они не были допустимыми кодами в наборе команд данной архитектуры.

Поскольку весьма маловероятно, хотя и возможно, что 32-битное целое примет это конкретное значение, появление такого числа в [отладчике](https://en.wikipedia.org/wiki/Debugger "Debugger") или [дампе памяти](https://en.wikipedia.org/wiki/Memory%5Fdump "Memory dump"), скорее всего, указывает на ошибку, например на переполнение буфера или [неинициализированную переменную](https://en.wikipedia.org/wiki/Uninitialized%5Fvariable "Uninitialized variable").

Известные и распространённые примеры:

| Код              | Описание                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 00008123         | Используется в MS Visual C++. Удалённые указатели устанавливаются в это значение, чтобы при последующем использовании они генерировали исключение; это более узнаваемый псевдоним для нулевого адреса. Активируется параметром Security Development Lifecycle (/sdl).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ..FACADE         | _"Facade"_, используется рядом [ОСРВ](https://en.wikipedia.org/wiki/Real-time%5Foperating%5Fsystem "Real-time operating system").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 1BADB002         | _"1 bad boot"_, магическое число заголовка [Multiboot](https://en.wikipedia.org/wiki/Multiboot%5FSpecification "Multiboot Specification").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 8BADF00D         | _"Ate bad food"_, указывает, что приложение [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") [iOS](https://en.wikipedia.org/wiki/IOS "IOS") было завершено из-за срабатывания сторожевого таймера.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| A5A5A5A5         | Используется во встраиваемой разработке, поскольку чередующийся битовый шаблон (1010 0101) создаёт легко узнаваемую картину на [осциллографах](https://en.wikipedia.org/wiki/Oscilloscope "Oscilloscope") и [логических анализаторах](https://en.wikipedia.org/wiki/Logic%5Fanalyzer "Logic analyzer").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| A5               | Используется в [FreeBSD](https://en.wikipedia.org/wiki/FreeBSD "FreeBSD") в PHK [malloc(3)](https://en.wikipedia.org/wiki/Malloc "Malloc") для отладки, когда /etc/malloc.conf символически связан с "-J", чтобы инициализировать всю вновь выделенную память этим значением, так как оно не является нулевым указателем или ASCII-символом NUL.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ABABABAB         | Используется отладочной функцией HeapAlloc() от [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") для пометки [защитных байтов](https://en.wikipedia.org/wiki/Guard%5Fbyte "Guard byte") «ничейной земли» после выделенной памяти кучи.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ABADBABE         | _"A bad babe"_, используется [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") как магическое число "Boot Zero Block".                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ABBABABE         | _"[ABBA](https://en.wikipedia.org/wiki/ABBA "ABBA") babe"_, используется кучей памяти игры _[Driver: Parallel Lines](https://en.wikipedia.org/wiki/Driver:%5FParallel%5FLines "Driver: Parallel Lines")_.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| ABADCAFE         | _"A bad cafe"_, используется для инициализации всей невыделенной памяти (Mungwall, [AmigaOS](https://en.wikipedia.org/wiki/AmigaOS "AmigaOS")).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| B16B00B5         | _"Big Boobs"_, ранее требовалось гипервизором [Hyper-V](https://en.wikipedia.org/wiki/Hyper-V "Hyper-V") от [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") для использования гостевыми системами Linux в качестве старшей половины их "guest id".                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| BAADF00D         | _"Bad food"_, используется отладочной функцией HeapAlloc() от [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") для пометки неинициализированной выделенной памяти кучи.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| BAAAAAAD         | _"Baaaaaad"_, указывает, что журнал [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") [iOS](https://en.wikipedia.org/wiki/IOS "IOS") является снимком стека всей системы, а не отчётом о сбое.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| BAD22222         | _"Bad too repeatedly"_, указывает, что VoIP-приложение [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") [iOS](https://en.wikipedia.org/wiki/IOS "IOS") было завершено, поскольку возобновлялось слишком часто.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| BADBADBADBAD     | _"Bad bad bad bad"_, «неинициализированная» память [Burroughs Large Systems](https://en.wikipedia.org/wiki/Burroughs%5FLarge%5FSystems "Burroughs Large Systems") (48-битные слова).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| BADC0FFEE0DDF00D | _"Bad coffee odd food"_, используется на 64-битных системах [IBM](https://en.wikipedia.org/wiki/IBM "IBM") [RS/6000](https://en.wikipedia.org/wiki/RS/6000 "RS/6000") для обозначения неинициализированных регистров ЦП.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| BADDCAFE         | _"Bad cafe"_, в [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") от [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems") помечает неинициализированную память ядра (KMEM\_UNINITIALIZED\_PATTERN).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| BBADBEEF         | _"Bad beef"_, используется в [WebKit](https://en.wikipedia.org/wiki/WebKit "WebKit") для особенно неустранимых ошибок.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| BEBEBEBE         | Используется [AddressSanitizer](https://en.wikipedia.org/wiki/AddressSanitizer "AddressSanitizer") для заполнения выделенной, но не инициализированной памяти.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| BEEFCACE         | _"Beef cake"_, используется [Microsoft .NET](https://en.wikipedia.org/wiki/Microsoft%5F.NET "Microsoft .NET") как магическое число в файлах ресурсов.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| C00010FF         | _"Cool off"_, указывает, что приложение [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") [iOS](https://en.wikipedia.org/wiki/IOS "IOS") было закрыто операционной системой в ответ на тепловое событие.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| CAFEBABE         | _"Cafe babe"_, используется [Java](https://en.wikipedia.org/wiki/Java%5F%28programming%5Flanguage%29 "Java (programming language)") для файлов классов. Используется в многоархитектурных двоичных файлах [Mach-O](https://en.wikipedia.org/wiki/Mach-O "Mach-O").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| CAFED00D         | _"Cafe dude"_, используется [Java](https://en.wikipedia.org/wiki/Java%5F%28programming%5Flanguage%29 "Java (programming language)") для сжатия [pack200](https://en.wikipedia.org/wiki/Pack200 "Pack200").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| CAFEFEED         | _"Cafe feed"_, используется отладочным ядром [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") от [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems") для пометки памяти kmemfree().                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| CCCCCCCC         | Используется отладочной библиотекой времени выполнения C++ от [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") и многими средами DOS для пометки неинициализированной памяти [стека](https://en.wikipedia.org/wiki/Stack-based%5Fmemory%5Fallocation "Stack-based memory allocation"). CC — это код операции прерывания отладочной точки останова [INT 3](https://en.wikipedia.org/wiki/INT%5F3 "INT 3") на процессорах x86\.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| CDCDCDCD         | Используется отладочной функцией malloc() C/C++ от [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") для пометки неинициализированной памяти кучи, обычно возвращаемой из HeapAlloc.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| 0D15EA5E         | _"Zero Disease"_, используется как флаг, указывающий на обычную загрузку на консолях [GameCube](https://en.wikipedia.org/wiki/GameCube "GameCube") и [Wii](https://en.wikipedia.org/wiki/Wii "Wii").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| DDDDDDDD         | Используется SmartHeap от MicroQuill и отладочной функцией free() C/C++ от Microsoft для пометки освобождённой памяти кучи.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| DEAD10CC         | _"Dead lock"_, указывает, что приложение [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") [iOS](https://en.wikipedia.org/wiki/IOS "IOS") было завершено, поскольку удерживало системный ресурс, работая в фоновом режиме.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| DEADBABE         | _"Dead babe"_, используется в начале файлов arena [IRIX](https://en.wikipedia.org/wiki/IRIX "IRIX") от [Silicon Graphics](https://en.wikipedia.org/wiki/Silicon%5FGraphics "Silicon Graphics").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| DEADBEEF         | _"Dead beef"_, широко используется на системах [IBM](https://en.wikipedia.org/wiki/IBM "IBM"), таких как [RS/6000](https://en.wikipedia.org/wiki/RS/6000 "RS/6000"), а также в [операционных системах](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system") [классической Mac OS](https://en.wikipedia.org/wiki/Classic%5FMac%5FOS "Classic Mac OS"), [OPENSTEP Enterprise](https://en.wikipedia.org/wiki/OPENSTEP%5FEnterprise "OPENSTEP Enterprise") и [Commodore](https://en.wikipedia.org/wiki/Commodore%5FInternational "Commodore International") [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga"). В [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") от [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems") помечает освобождённую память ядра (KMEM\_FREE\_PATTERN).                                                                                                                                             |
| DEADCAFE         | _"Dead cafe"_, используется [Microsoft .NET](https://en.wikipedia.org/wiki/Microsoft%5F.NET "Microsoft .NET") как номер ошибки в [DLL](https://en.wikipedia.org/wiki/Dynamic-link%5Flibrary "Dynamic-link library").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| DEADC0DE         | _"Dead code"_, используется как маркер в прошивке [OpenWRT](https://en.wikipedia.org/wiki/OpenWRT "OpenWRT"), чтобы обозначить начало создаваемой файловой системы jffs2 в конце статической прошивки.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| DEADFA11         | _"Dead fail"_, указывает, что приложение [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") [iOS](https://en.wikipedia.org/wiki/IOS "IOS") было принудительно закрыто пользователем.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| DEADF00D         | _"Dead food"_, используется Mungwall на [Commodore](https://en.wikipedia.org/wiki/Commodore%5FInternational "Commodore International") [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga") для пометки выделенной, но неинициализированной памяти.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| DEFEC8ED         | _"Defecated"_, используется для [дампов памяти](https://en.wikipedia.org/wiki/Core%5Fdump "Core dump") [OpenSolaris](https://en.wikipedia.org/wiki/OpenSolaris "OpenSolaris").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| DEADDEAD         | _"Dead Dead"_ указывает, что пользователь намеренно инициировал дамп аварийного завершения из отладчика ядра или с клавиатуры под управлением Microsoft Windows.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| D00D2BAD         | _"Dude, Too Bad",_ используется при сбоях Safari в macOS Big Sur.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| D00DF33D         | _"Dude feed",_ используется [деревом устройств (devicetree)](https://en.wikipedia.org/wiki/Devicetree "Devicetree") для обозначения начала заголовков.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| EBEBEBEB         | Из SmartHeap от MicroQuill.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| FADEDEAD         | _"Fade dead"_, ставится в конце для идентификации каждого скрипта [AppleScript](https://en.wikipedia.org/wiki/AppleScript "AppleScript").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| FDFDFDFD         | Используется отладочной функцией malloc() C/C++ от [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") для пометки [защитных байтов](https://en.wikipedia.org/wiki/Guard%5Fbyte "Guard byte") «ничейной земли» до и после выделенной памяти кучи, а также некоторыми отладочными функциями Secure [C-Runtime](https://en.wikipedia.org/wiki/C%5Fstandard%5Flibrary "C standard library"), реализованными Microsoft (например, strncat\_s).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| FEE1DEAD         | _"Feel dead"_, используется системным вызовом reboot() в [Linux](https://en.wikipedia.org/wiki/Linux "Linux").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| FEEDFACE         | _"Feed face"_, встречается в двоичных файлах [Mach-O](https://en.wikipedia.org/wiki/Mach-O "Mach-O") на платформе Mac OSX от [Apple Inc.](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") В [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") от [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems") помечает красную зону (KMEM\_REDZONE\_PATTERN). Используется [VLC player](https://en.wikipedia.org/wiki/VLC%5Fplayer "VLC player") и некоторыми [IP-камерами](https://en.wikipedia.org/wiki/IP%5Fcamera "IP camera") в протоколе [RTP](https://en.wikipedia.org/wiki/Real-time%5FTransport%5FProtocol "Real-time Transport Protocol")/[RTCP](https://en.wikipedia.org/wiki/RTCP "RTCP"); VLC player отправляет четыре байта в порядке [байтов](https://en.wikipedia.org/wiki/Endianness "Endianness") системы. Некоторые IP-камеры ожидают, что плеер отправит это магическое число, и не запускают поток, если оно не получено. |
| FEEEFEEE         | _"Fee fee"_, используется отладочной функцией HeapFree() от [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") для пометки освобождённой памяти кучи. У некоторых близлежащих внутренних служебных значений старшее слово также может быть установлено в FEEE.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |

Большинство из них имеют длину 32 [бита](https://en.wikipedia.org/wiki/Bit "Bit") — [размер машинного слова](https://en.wikipedia.org/wiki/Word%5Fsize "Word size") большинства компьютеров с 32-битной архитектурой.

Распространённость этих значений в технологиях Microsoft не случайна; они подробно рассматриваются в книге [Стива Магуайра](https://en.wikipedia.org/wiki/Steve%5FMaguire "Steve Maguire") _Writing Solid Code_, выпущенной [Microsoft Press](https://en.wikipedia.org/wiki/Microsoft%5FPress "Microsoft Press"). Он приводит ряд критериев для таких значений, например:

* Они не должны быть полезными; то есть от большинства алгоритмов, работающих с ними, следует ожидать чего-то необычного. Числа вроде нуля этому критерию не соответствуют.
* Программист должен легко распознавать их в отладчике как недопустимые значения.
* На машинах без [выравнивания байтов](https://en.wikipedia.org/wiki/Byte%5Falignment "Byte alignment") они должны быть [нечётными числами](https://en.wikipedia.org/wiki/Odd%5Fnumber "Odd number"), чтобы разыменование их как адресов вызывало исключение.
* Они должны вызывать исключение или, возможно, даже останов отладчика при выполнении в качестве кода.

Поскольку их часто использовали для пометки областей памяти, которые по сути были пусты, некоторые из этих терминов стали употребляться в выражениях со значением «исчез, прерван, вытеснен из памяти»; например, "Твоя программа — DEADBEEF".
