Що стосується 0xCC
і , 0xCD
зокрема, ці реліквії від Intel 8088 / 8086 набір команд процесора ще в 1980 - х роках. 0xCC
є особливим випадком програмного коду переривання . Спеціальна однобайтова версія дозволяє програмі генерувати переривання 3 .INT
0xCD
0xCC
Хоча номери програмного переривання, в принципі, довільні, INT 3
традиційно використовувались для функції налагодження відключення або точки відключення , умовою, яка залишається донині. Щоразу, коли налагоджувач запускається, він встановлює обробник переривання для INT 3
такого, що при виконанні цього коду відладчик буде спрацьовувати. Зазвичай він призупиняє програмування, що виконується в даний час, і показує інтерактивну підказку.
Як правило, x86 INT
опкод - це два байти: 0xCD
слідом за потрібним номером переривання від 0-255. Тепер, хоча можна було випустити 0xCD 0x03
для цього INT 3
, Intel вирішила додати спеціальну версію - 0xCC
без додаткового байту - тому що для коду повинен бути лише один байт, щоб він міг функціонувати як надійний "байт заповнення" для невикористаної пам'яті.
Суть у тому, щоб дозволити витончене відновлення, якщо процесор помилково стрибне в пам'ять, яка не містить жодних передбачених інструкцій . Багатобайтові вказівки не підходять для цієї мети, оскільки помилковий стрибок може приземлитися при будь-якому можливому зміщенні байтів, де потрібно було б продовжуватись із правильно сформованим потоком інструкцій.
Очевидно, що однобайтові опкоди для цього працюють тривіально, але можуть бути і вигадливі винятки: наприклад, розглядаючи послідовність заповнення 0xCDCDCDCD
(також згадувану на цій сторінці), ми можемо побачити, що це досить надійно, оскільки незалежно від того, де розташований вказівник інструкції ( крім, можливо, останнього заповненого байта), процесор може відновити виконання дійсної двобайтової інструкції x86 CD CD
, в цьому випадку для створення програмного переривання 205 (0xCD).
Незважаючи на те, що на CD CC CD CC
100% можна інтерпретувати - даючи одну INT 3
або INT 204
- послідовність CC CD CC CD
є менш надійною, лише 75%, як показано, але, як правило, 99,99%, коли повторюється як наповнювач пам'яті розміру в інт.
Довідник макроассемблера , 1987