Wie interpretieren Sie den Befehl manuell?
77f4bcbc 8945fc mov dword ptr [ebp-4],eax
Und hier ist die Regel:
88 /r MOV r/m8,r8 2/2 Move byte register to r/m byte
89 /r MOV r/m16,r16 2/2 Move word register to r/m word
89 /r MOV r/m32,r32 2/2 Move dword register to r/m dword
Interpretieren 8945fc
zu mov dword ptr [ebp-4],eax
?
was genau möchten Sie tun? und die Maschine opcode? intel x86 ?
es ist x86,ich habe Probleme bei der Interpretation opcode Montage..
es ist x86,ich habe Probleme bei der Interpretation opcode Montage..
InformationsquelleAutor kern | 2011-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wir haben hier ein drei-byte-Instruktion: 89 45 fc. Das erste byte ist der opcode-byte. Suchen Sie in der Tabelle, können wir sehen, dass es eine " MOV " - Anweisung, und es dauert eine Mod R/M byte. Das Mod R/M-byte hat folgenden Aufbau:
Schauen wir uns das zweite byte der Anweisung. 0x45 ist 01.000.101 in Binär. So, Mod 01, Reg 000 ist und R/M 101.
Nachschlagen in der Referenz, z.B. hier, können wir sehen, dass die Kombination von Mod=01 und R/M=101 entspricht dem [EBP+sbyte] operand. Die "sbyte" ist ein 8-bit signed Verschiebung, die codiert ist in der Dritten byte: 0xFC. Seit der Verschiebung ist unterschrieben, es muss interpretiert werden, als solche Zahl, d.h. -4.
Dem "/r" Hinweis: neben der Anweisung sagt uns, dass das register (zweiten) operand angegeben ist durch die Reg-Feld der Instruktion. Reg=000 ist, al/ax/eax. Unter der Annahme einer 32-bit-Modus eingestellt, wird dies bedeuten, dass eax.
Montage alle der oben genannten, wir bekommen
Nur Frage mich, Wie hast du erfahren, dass MOV nimmt einem Mod R/M byte? kann ich es herausfinden mit: r/m16/32 oder r16/32?
InformationsquelleAutor Igor Skochinsky
89
ist der opcode45
kodiert die Quelle und das Zielfc
ist der offset (-4)InformationsquelleAutor Paul R
Wenn Sie wollen, schreiben Sie Ihre eigenen disassembler, hier, was Sie brauchen.
Für einen schnellen überblick, schauen hier
InformationsquelleAutor Lior Kogan
suchen mov dword ptr [ebp-4],eax Sie haben 8 bit code.Sie können es leicht zu bekommen
hier ist das Verfahren
die ersten sechs bits sind gegeben, oder sollte eingeprägt werden für mov-Befehl und fügen Sie dann auf der LSB das Ziel-bit(D), wobei d=1, wenn es ein register, in dem die Ziel-oder d=0, wenn das register wird in der Quelle.Hier das register " eax " ist in der Quelle eine Seite, so fügen Sie 0 und dann das Letzte bit, das heißt word bit(W-bit) fügen Sie in der LSB-Seite nach destination bit wo
W-bit= 1, wenn es 16/32 bit register oder 0, wenn es 8-bit-register, so dass jetzt, nach dem Befehl "mov dword ptr [ebp-4],eax"
das d-bit=0-und w-bit =1
jetzt bekommen Sie die 8 bits der opcode
dann haben Sie zu findout die MOD(R/M) Bereich.
für diese müssen Sie herausfinden, der 3 Dinge.
1) mod-Wert
2) register Wert
3) R/M-Wert
hier ist das format
+-----+---------+---------+
| Mod | Reg | R/M |
+-----+---------+---------+
wie bereits in der obigen Antwort
überprüfen Sie in der Befehl mov dword ptr [ebp-4],eax
es ist eine 8-bit-Verschiebung nach -4 dann mod-Wert =01
MOD-WERTE:
00 für keine Verschiebung
01 für 8-bit-Verschiebung
10 für 16-bit-displacment
11 für das register-zu-register-transfer -
also hier
mod=01
dann
für reg eax der Wert 000
und für (R/M) der Wert 101
also die R/M-Feld 8 bits sind
01000101
hoffe, diese Beschreibung hilft
InformationsquelleAutor taha027