Ungültiger Opcode - Illegal opcode

Ein vom Menschen erzeugtes illegales Befehlssignal

Ein illegaler Opcode , auch undokumentierte Instruktion genannt , ist eine Anweisung an eine CPU , die in keiner offiziellen Dokumentation des CPU-Designers oder -Herstellers erwähnt wird, die jedoch eine Wirkung hat. Illegale Opcodes waren auf älteren CPUs, die in den 1970er Jahren entwickelt wurden, wie der MOS Technology 6502 , Intel 8086 und dem Zilog Z80 üblich . Bei diesen älteren Prozessoren existieren viele als Nebeneffekt der Verdrahtung von Transistoren in der CPU und kombinieren normalerweise Funktionen der CPU, die nicht kombiniert werden sollten. Bei alten und modernen Prozessoren gibt es auch vom Hersteller absichtlich Anweisungen im Prozessor, die jedoch in keiner offiziellen Spezifikation dokumentiert sind.

Überblick

Während die meisten versehentlichen illegalen Anweisungen nutzlose oder sogar höchst unerwünschte Auswirkungen haben (z. B. den Computer zum Absturz bringen), können einige in bestimmten Situationen nützliche Funktionen haben. Solche Anweisungen wurden manchmal in Computerspielen der 1970er und 1980er Jahre ausgenutzt , um bestimmte zeitkritische Abschnitte zu beschleunigen. Eine weitere häufige Anwendung war der andauernde Kampf zwischen Kopierschutzimplementierungen und Cracking . Hier waren sie eine Form der Sicherheit durch Dunkelheit , und ihre Geheimhaltung dauerte meist nicht lange.

In einigen Fällen könnte eine "illegale" Anweisung umfunktioniert werden. Auf den Mainframe-Computern der Digital Equipment Corporation PDP10 und DECSYSTEM-20, die in den 1960er bis 1990er Jahren verwendet wurden, gab es keinen Systemaufrufbefehl (ein Mittel zum Anfordern von Eingabe-Ausgabe- und anderen Diensten vom Betriebssystem), sodass stattdessen die Betriebssysteme TOPS-10 und TOPS-20 erkannten einen bestimmten illegalen Befehl als Supervisor-Aufruf.

Eine mit der Verwendung illegaler Anweisungen verbundene Gefahr bestand darin, dass sie aufgrund der Tatsache, dass der Hersteller ihre Existenz und Funktion nicht garantiert, bei jeder Änderung der CPU-Interna oder einer neuen Revision der CPU verschwinden oder sich anders verhalten könnten, wodurch Programme wiedergegeben werden, die verwenden Sie sie inkompatibel mit den neueren Revisionen. Zum Beispiel funktionierten einige ältere Apple II- Spiele auf dem neueren Apple IIc nicht richtig , weil letzterer eine neuere CPU-Revision – 65C02  – verwendet, die illegale Opcodes beseitigt .

Neuere CPUs, wie die 80186 , 80286 , 68000 und ihre Nachkommen, haben keine illegalen Opcodes, die weithin bekannt/verwendet werden. Idealerweise verhält sich die CPU gut definiert, wenn sie einen unbekannten Opcode im Befehlsstrom findet, wie zum Beispiel das Auslösen einer bestimmten Ausnahme- oder Fehlerbedingung. Der Ausnahme- oder Fehlerhandler des Betriebssystems beendet dann normalerweise die Anwendung, die den Fehler verursacht hat, es sei denn, das Programm hatte zuvor seinen eigenen Ausnahme-/Fehlerhandler eingerichtet, in diesem Fall würde dieser Handler die Kontrolle übernehmen. Eine andere, weniger übliche Art, illegale Befehle zu handhaben, besteht darin, sie so zu definieren, dass sie nichts tun, außer Zeit und Platz zu beanspruchen (entspricht dem offiziellen NOP- Befehl der CPU ); diese Methode wird unter anderem von den Prozessoren TMS9900 und 65C02 verwendet.Alternativ können unbekannte Befehle in Software emuliert werden (zB LOADALL ) oder sogar "neue" Pseudobefehle implementiert werden. Einige BIOSe , Speichermanager und Betriebssysteme machen sich dies zunutze, um beispielsweise V86-Tasks mit dem zugrunde liegenden System ("bop") kommunizieren zu lassen.

Trotz dieser Herstellergarantie gegen solche Anweisungen hat die Forschung mit Techniken wie Fuzzing eine Vielzahl undokumentierter Anweisungen in modernen x86-Prozessoren aufgedeckt. Einige dieser Anweisungen werden von Prozessorherstellern gemeinsam verwendet, was darauf hindeutet, dass Intel und AMD sowohl die Anweisung als auch ihren Zweck kennen, obwohl sie in keiner offiziellen Spezifikation enthalten ist. Andere Anweisungen sind hersteller- oder produktlinienspezifisch. Der Zweck der meisten undokumentierten x86-Befehle ist unbekannt.

Die Details dieser Anleitung sind heute vor allem für die exakte Emulation älterer Systeme interessant .

Siehe auch

Verweise