Falscher Opcode
-
Was passiert eigentlich, wenn der Prozessor ein Programm ausführt, welches einen ihm unbekannten Opcode enthält?
lg, phreaking
-
jap, der Rechner bringt nen Fehler...
von wegen unbekannter Befehl...
Eventuell hängt er sich auch einfach auf
cYa
DjR
-
Um genau zu sein gibt das eine exception 06: invalid opcode.
-
Aha! Und wie kann ich testen, ob ein bestimmter Opcode vorhanden ist? Das müss so in der Art gehen (Pseudocode):
-> Einen eigenen Interrupt-Handler schreiben, etwa so in der Art:
pop eax inc eax push eax
-> Zum Testen eines Opcodes:
push aktuellen Interrupt-Adresse 6 push 0 setze neue Interrupt-Adresse 6 auf eigenen Interrupt-Handler zu testenden Opcode ausführen pop eax pop alte Interrupt-Adresse 6, alten Handler setzen cmp eax, 0 je OPCODE_VORHANDEN OPCODE_NICHT_VORHANDEN: .... jmp WEITER OPCODE_VORHANDEN: ... WEITER:
Könnte das so funktionieren? Gibt es einfachere bzw. andere Möglichkeiten?
lg, phreaking
[ Dieser Beitrag wurde am 01.07.2002 um 16:09 Uhr von phreaking editiert. ]
-
Hat das denn noch nie jemand von euch gemacht? Kann mir denn keiner helfen?
greetz, phreaking
-
Noe, sowas habe ich noch nicht gemacht. Mir hat es bisher gereicht, zu wissen, was fuer eine CPU im Rechner steckt.
Davon laesst sich ungefaehr ableiten, welche Opcodes unterstuetzt werden.
Dein code dort ist ziemlich umstaendlich. Es wuerde doch schon reichen, vor dem zu testenden Befehl zB. al 0 zu setzen und im Handler von Int06 ein inc al auszufuehren.
Und der Handler fuer int 6 muss auch nicht fuer jeden Opcode neu gesetzt werden.
Ansonsten sollte dieser Code im RM laufen, leider weiss ich nicht genau, wie im PM auf solche Fehler reagiert wird.
-
Vorsicht mit Stackoperationen wenn du mit Interrupts arbeitest!
Denn bei einem Interrupt wird sowiet ich weiß (e)ip und e(flags) aufm stack abgelegt, also musst du aufpassen, was du in dienem Interrupthandler vom Stack holst und manipulierst
Aber prinzipiell stimmts so, hab auch schon code gesehen, der genau so arbeitet um durch die opcodes festzustellen, welche CPU GENAU in einem Rechner steckt
-
OK! Danke für die Antworten!
thx, phreaking