In Bezug 0xCC
und 0xCD
insbesondere sind diese Relikte aus der Intel 8088 / 8086 - Prozessor - Befehlssatz zurück in den 1980er Jahren. 0xCC
ist ein Sonderfall des Software-Interrupt- Opcodes . Die spezielle Einzelbyte-Version ermöglicht es einem Programm, Interrupt 3 zu generieren .INT
0xCD
0xCC
Obwohl Software-Interrupt-Nummern im Prinzip willkürlich sind, INT 3
wurde sie traditionell für die Debugger-Break- oder Breakpoint- Funktion verwendet, eine Konvention, die bis heute besteht. Jedes Mal, wenn ein Debugger gestartet wird, installiert er einen Interrupt-Handler INT 3
, sodass der Debugger ausgelöst wird, wenn dieser Opcode ausgeführt wird. In der Regel wird die aktuell ausgeführte Programmierung angehalten und eine interaktive Eingabeaufforderung angezeigt.
Normalerweise besteht der x86- INT
Opcode aus zwei Bytes: 0xCD
gefolgt von der gewünschten Interrupt-Nummer von 0-255. Nun , obwohl Sie könnten ausgeben 0xCD 0x03
für INT 3
Intel ein spezielles version-- hinzuzufügen entschieden 0xCC
ohne zusätzliches Byte - weil ein Opcode nur ein Byte, um zu funktionieren als zuverlässiger ‚Füllbytezeiger‘ für nicht genutzte Speicher sein muss.
Hier geht es darum, eine ordnungsgemäße Wiederherstellung zu ermöglichen, wenn der Prozessor versehentlich in einen Speicher springt, der keine beabsichtigten Anweisungen enthält . Mehrbyte-Befehle sind für diesen Zweck nicht geeignet, da ein fehlerhafter Sprung bei jedem möglichen Byte-Versatz landen könnte, wo er mit einem ordnungsgemäß gebildeten Befehlsstrom fortgesetzt werden müsste.
Offensichtlich funktionieren Ein-Byte-Opcodes hierfür trivial, aber es kann auch eigenartige Ausnahmen geben: Wenn 0xCDCDCDCD
wir beispielsweise die Füllsequenz (ebenfalls auf dieser Seite erwähnt) betrachten, können wir sehen, dass sie ziemlich zuverlässig ist, da unabhängig davon, wo der Befehlszeiger landet ( außer vielleicht dem zuletzt gefüllten Byte) kann die CPU die Ausführung eines gültigen Zwei-Byte- x86-Befehls fortsetzen CD CD
, in diesem Fall zum Erzeugen des Software-Interrupts 205 (0xCD).
Noch seltsamer, während die Sequenz zu CD CC CD CC
100% interpretierbar ist - entweder INT 3
oder INT 204
-, CC CD CC CD
ist die Sequenz weniger zuverlässig, nur 75% wie gezeigt, aber im Allgemeinen 99,99%, wenn sie als Speicherfüller mit int-Größe wiederholt wird.
Macro Assembler Reference , 1987