Opcode xchg

hey,

Ich habe heute mit Ollydbg ein bisschen rumgespielt und bin aus was merkwürdiges gestoßen:

Man kann xchg eax,ecx in 3 Varianten ausdrücken:

1. 0x91
2. 0x87,0xC1
3. 0x87,0xC8

Nun meine Frage: sind wirklich alle 3 Schreibweisen korrekt oder ist Ollydbg nur ein bisschen Buggy das er die Opcodes so interpretiert?

mfg

Dark Snake
 
Jep. Die Schreibweisen sind korrekt. Hier sieht man sehr schön die "Altlasten" von Intel ;)
Wenn man sich nämlich eine Opcode Tabelle sucht:
http://ref.x86asm.net/coder32-abc.html
einmal gib es das als
Code:
XCHG 	r16/32 	eAX  90+r
(Opcode berechnet sich aus 0x90 + "Register Nummer" == ECX == 1)
und:
Code:
XCHG 	r16/32 	r/m16/32 						87 		r
wobei das r ==
r indicates that the ModR/M byte contains a register operand and an r/m
also beide operanden in einem Byte kodieren kann - einmal als
C1 == ECX, EAX
und C8 == EAX, ECX

(wobei die Tabelle imho nicht so schön lesbar ist (ich hatte jetzt aber auf langwierige Suche nicht so die Lust ;) ) )
 
Zurück
Oben