Wie funktioniert die x86-ROR Instruktion arbeitet?
Meine EAX
- register enthält den xxxxxx9D
Wert und ich habe folgenden Assembler code:
C0C8 14 --> ROR AL,14
Mir, es bedeutet, dass die letzten 8 bits der EAX
's 32-bit Wert gedreht werden bitweise um 14 mod 8 = 6 Positionen
0x9D = b1001 1101
verwandelt sich in
b0111 0110 = 0x76
Jedoch OllyDbg sagt mir, dass EAX = xxxxxxD9
, was bedeutet EAX gedreht wurde bitweise durch 4 bits!
Wo bin ich falsch?
- Das ist 14 hex 20 dezimal.
- Für das Protokoll: best-practices für den Ausdruck rotiert in einer compiler-freundliche Weise, die Vermeidung von undefinierten Verhalten: stackoverflow.com/questions/776508/.... Dass die Antwort-code, die Sie erhalten, gcc und clang für die Erstellung eines einzigen
ror
Unterricht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du versuchst zu drehen, ein 8-bit register um 20 Positionen. Das ist ein bisschen viel, drehen die durch 8 produziert den gleichen Wert. Drehen von 9 ist das gleiche wie drehen, indem Sie 1. Etcetera. Der Prozessor wird so um 20 mod 8 = 4 Positionen.
Poste deinen kompletten code, mit diesem:
Bekomme ich 76 als erwartet.
Bearbeiten, Wenn Sie drehen, von $14 Positionen, die Sie erhalten d9.