Что касается 0xCC
и 0xCD
, в частности, это реликвии от инструкции процессора Intel 8088 / 8086 , созданной еще в 1980-х годах. 0xCC
является частным случаем программного прерывания код операции INT
0xCD
. Специальная однобайтовая версия 0xCC
позволяет программе генерировать прерывание 3 .
Хотя номера программных прерываний, в принципе, произвольны, INT 3
традиционно использовался для функции прерывания отладчика или точки останова , соглашение, которое сохраняется и по сей день. Всякий раз, когда отладчик запускается, он устанавливает обработчик прерываний для INT 3
, так что при выполнении этого кода операции будет запускаться отладчик. Обычно это приостанавливает текущее программирование и отображает интерактивное приглашение.
Обычно код операции x86 INT
составляет два байта: 0xCD
, за которым следует номер прерывания от 0 до 255. Теперь, хотя вы могли бы выдать 0xCD 0x03
для INT 3
, Intel решила добавить специальную версию - 0xCC
без дополнительного байта - потому что код операции должен быть только один байт, чтобы функционировать как надежный «байт заполнения» для неиспользуемой памяти.
Смысл здесь в том, чтобы обеспечить постепенное восстановление , если процессор ошибочно переходит в память, которая не содержит каких-либо предполагаемых инструкций . Многобайтовые инструкции не подходят для этой цели, так как ошибочный переход может привести к любому возможному смещению байта, где он должен был бы продолжаться с правильно сформированным потоком команд.
Очевидно, что однобайтовые коды операций работают для этого тривиально, но могут быть и причудливые исключения: например, рассматривая последовательность заполнения 0xCDCDCDCD
(также упомянутую на этой странице), мы можем видеть, что она достаточно надежна, так как неважно где указатель указатель приземляется (за исключением возможно последний заполненный байт), CPU может возобновить выполнение действительной двухбайтовой x86 CD CD
, в этом кейс для генерации программного прерывания 205 (0xCD).
Еще более странно, тогда как CD CC CD CC
интерпретируется на 100% - давая либо INT 3
, либо INT 204
- последовательность CC CD CC CD
менее надежна, только 75%, как показано, но обычно 99,99% при повторении в виде заполнитель памяти int-size.
Справочник по макросам , 1987