Avatar von Lars Rohwedder
  • Lars Rohwedder

mehr als 1000 Beiträge seit 19.05.2000

Das ist doch im Artikel beschrieben!

jms schrieb am 31.08.2017 11:44:

Befehle können bis zu 15 Bytes lang sein. Wenn es aber einen Befehl "0DCF" gibt, dann kann es keine längeren Befehle geben, die auch mit 0DCF anfangen.
Ich nehme auch an die 15 Bytes sind mit Argument, also Sprungziel usw.
Von daher dürfte die tatsächliche Anzahl an möglichen Befehlen viel viel kleiner sein als 10^36.

Richtig. Darum muss man ja herausfinden, wie lang ein Befehl für einen nicht dokumentierten Opcode ist.

Das machen sie, wie im Artikel beschrieben, indem sie sich auf den Speicherschutz verlassen: Liegt dein 0DCF-Befehl z.B. 2 Bytes vor der Seitengrenze und es wird "illegal opcode" geworfen, weiß man: der Befehl, den die CPU ausführen wollte, ist 2 Byte lang. Kommt dagegen "segfault", weiß man, dass der Befehlsdekoder noch weitere Bytes lesen wollte. Also führt man 0DCF nun 3 Bytes vor der Seitengrenze aus usw.

Auf diese Weise kennt man die Länge der undokumentierten Opcodes und das reduziert die Anzahl auf etwa 100 Millionen. So steht es im Artikel.

Hast du den Artikel nicht gelesen oder nur überflogen?

L.

Bewerten
- +
Anzeige