2012-06-24 8 views
7

irgend Assembler-Code Suche nach x86_64 auf meinem Mac, sehe ich die folgende Anweisung:Wie interpet ich diesen x86_64 Assembly Opcode?

48 c7 c0 01 00 00 00 movq $0x1,%rax 

Aber nirgends kann ich einen Hinweis finden, der den Opcode bricht. Es scheint, als wäre 48c7 eine Bewegungsinstruktion, c0 definiert das% rax Register usw.

Also, wo finde ich eine Referenz, die mir das alles sagt?

Ich bin bewusst, http://ref.x86asm.net/, aber mit Blick auf 48 Opcodes, sehe ich nichts, das eine Bewegung ähnelt.

+1

Ich habe ähnliche Fragen hier gesehen. Wenn ich das bei Google finden könnte, hätte ich nicht gefragt. Die Tatsache, dass ich die Referenz kenne, die ich in meiner Frage geschrieben habe, zeigt auch, dass ich nicht einfach zu faul bin, mich selbst zu suchen. – Christoph

+1

@Oded, googeln für "x86 0x48 Befehlspräfix" ist ziemlich schwierig, wenn Sie nicht wissen, was Sie suchen ... – Griwes

+0

@Oded Ich formulierte meine Frage neu, um entwicklerspezifischer zu sein. Angesichts der (wirklich guten!) Referenz auf x86asm.net muss ich nur verstehen, wie dieser Opcode aufgelöst wird. Griwes half dabei. – Christoph

Antwort

10

Tatsächlich ist mov0xc7 dort; 0x48 ist in diesem Fall ein langer Modus REX.W prefix.

Beantworten Sie auch die Frage in Kommentaren: 0xc0 ist b11000000. Here können Sie herausfinden, dass mit REX.B = 0 (als REX-Präfix ist 0x48, das Bit .B ist nicht festgelegt), 0xc0 bedeutet "RAX ist der erste Operand" (in Intel-Syntax; mov rax, 1, RAX ist zuerst oder im Fall von mov, Ausgabe Operand). Sie können herausfinden, wie man ModR/M here liest.

+0

Danke, das hilft! Vielleicht sollte ich meine Frage neu formulieren. – Christoph

+0

Was ist mit der c0? Wo kommt das rein? – Christoph

+0

@Christoph, fügte Erklärung in Antwort hinzu. – Griwes

1

Wenn Sie auf der binären

aussehen
48 c7 c0 01 00 00 00 

müssen Sie es, um zerlegen, seine Bedeutung zu verstehen.

Der Algorithmus zum Disassemblieren ist nicht schwierig, aber es ist komplex. Es erfordert das Nachschlagen mehrerer Tabellen.

Der Algorithmus ist in der 2. Band von Intel Developer Manual,

Intel® 64 and IA-32 Architectures 
Software Developer’s Manual 
Volume 2 (2A, 2B & 2C): 
Instruction Set Reference, A-Z 

Sie starten vom INSTRUCTION FORMAT genannt Kapitel zu lesen.

Oder gibt es gute Bücher, die zu diesem Thema ganze Kapitel widmen, wie

X86 Instruction Set Architecture, Mindshare, by Tom Shanley. 

Ein ganzes Kapitel Zerlegen binären X86 gewidmet ist.

Oder Sie können starten Sie den allgemeinen Algorithmus aus einem Handbuch für die gleiche Sprache, die von AMD hergestellt Lese:

AMD64 Architecture 
Programmer’s Manual 
Volume 3: 
General-Purpose and System Instructions 

Hier im Kapitel Instruction Encoding Sie die Automaten finden, die diese Sprache von Anweisungen definiert, und aus Mit diesem grafischen Schema können Sie den Decoder einfach schreiben.

Nachdem Sie dies getan haben, können Sie zurück zum Intel Handbuch, 2. Band, und verwenden Sie es als Nachschlagewerk.

Ich fand auch nützlich die reverse engineering class von http://opensecuritytraining.info/. Diese Seite wurde von einem Doktoranden der CMU erstellt, das meiste davon ist nicht gut gemacht, aber es braucht mehr Zeit um es zu studieren und anzuwenden.

Nachdem Sie die grundlegenden Ideen verstanden haben, können Sie über ein freies Projekt nachdenken, das den Algorithmus implementiert. Ich fand das distorm Projekt nützlich.Zu Beginn ist es wichtig, keine abstrakten Projekte (wie qemu oder objdump) zu betrachten, die versuchen, Disasesembler für viele Sprachen im gleichen Code zu implementieren, da sie verloren gehen. Distorm konzentriert sich nur auf x86 und implementiert es richtig und erschöpfend. Es vermittelt in formeller Sprache die Definition von X86-Sprache, während die Intel- und AMD-Handbücher X86-Sprache definieren, indem sie natürliche Sprache verwenden.

Andere Projekt, das gut funktioniert, ist udis86.

+0

Sie meinen den Algorithmus zum Zerlegen? Es klingt zunächst so, als würden Sie 'mov' einen Algorithmus nennen. –

+0

richtig, korrigiert. – alinsoar

Verwandte Themen