Wie kann ich interpet dieses x86_64 Montage-opcode?
Blick auf einige assembly-code für x86_64 auf meinem Mac sehe ich die folgende Anleitung:
48 c7 c0 01 00 00 00 movq $0x1,%rax
Aber nirgendwo finde ich einen Hinweis, dass bricht den opcode. Wie es scheint, 48c7 ist eine move-Anweisung, c0 definiert die %rax-register, etc.
So, wo finde ich eine Referenz, die mir sagt das alles?
Ich bin mir bewusst,http://ref.x86asm.net/, aber mit Blick auf die 48-opcodes, ich sehe nichts, das ähnelt einem Umzug.
- Ich habe gesehen, ähnliche Fragen hier. Wenn ich könnte finden, das auf Google, ich würde nicht gebeten haben. Die Tatsache, dass ich bin mir bewusst, der Hinweis, den ich geschrieben in meiner Frage, zeigt auch, dass ich nicht nur zu faul zum suchen mich.
- Sie googeln für "x86 0x48 instruction prefix" ist ziemlich schwierig, wenn Sie nicht wissen, was Sie suchen...
- Ich habe meine Frage umformuliert werden mehr Entwickler-spezifisch. Angesichts der (wirklich guten!) Verweis auf x86asm.net ich denke, ich brauche nur zu verstehen, wie das opcode zerbrochen ist. Griwes half mit, die.
- Wenn Sie nicht finden, die 0x48 an x86asm.net ist das so, weil Sie nicht gut aussah: ref.x86asm.net/coder64.html#x48 . -1.
- Ich war auf der Suche nach einem mov. Ich weiß jetzt besser, danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich
mov
ist 0xc7 es; 0x48 ist, in diesem Fall, eine lange-Modus REX.Präfix W.Beantworten auch die Frage in den Kommentaren: 0xc0 ist b11000000. Hier finden Sie heraus, dass mit
REX.B = 0
(als REX-Präfix ist 0x48, die .B bit nicht gesetzt ist), 0xc0 bedeutet "RAX ist der erste operand" (in Intel-syntax;mov rax, 1
, RAX ist der erste, oder, im Fall vonmov
-, output-operand). Finden Sie heraus, wie zu Lesen ModR/M hier.Wenn man sich die binäre
müssen Sie zu zerlegen, um Ihre Bedeutung zu verstehen.
Den Algorithmus für die Demontage ist nicht schwer, aber es ist Komplex. Sie nimmt an der Suche mehrere Tabellen.
Der Algorithmus ist beschrieben in der 2. volume von Intel Developer Manual,
Starten Sie das Lesen aus dem Kapitel
INSTRUCTION FORMAT
.Oder gibt es gute Bücher, die widmen ganze Kapitel zu diesem Thema, wie
Ganzes Kapitel gewidmet ist, um die Demontage binäre X86.
Oder Sie können beginnen, Lesen Sie die Allgemeinen Algorithmus aus einem Handbuch für die gleiche Sprache von AMD:
Hier, im Kapitel
Instruction Encoding
finden Sie die Automaten, definiert die Sprache der Anleitung, und von diesem grafischen Schema, Sie können schreiben Sie einfach den decoder.Nachdem Sie dies tun, Sie kommen zurück, um die Intel-Handbuch, 2. Band, und verwenden Sie es als ein Nachschlagewerk.
Fand ich auch nützlich, die reverse-engineering-Klasse von http://opensecuritytraining.info/. Diese Seite wurde erstellt von einem Doktoranden von CMU, die meisten ist es nicht gut gemacht, aber es erfordert mehr Zeit, Sie zu studieren und anzuwenden.
Nachdem Sie verstehen, die grundlegende Ideen kann man über ein freies Projekt implementiert den Algorithmus. Ich fand nützlich, die distorm Projekt. Am Anfang ist es wichtig, nicht den Blick auf abstrakte Projekte (z.B. qemu oder objdump), die versuchen zu implementieren dissasemblers für viele Sprachen den gleichen code wie Sie verloren.
Distorm
konzentriert sich nur auf x86 und führt diese korrekt und vollständig. Es vermittelt in formalen Sprache, die die definition von X86-Sprache, während die Intel-und AMD-Handbücher definieren X86 Sprache durch die Verwendung natürlicher Sprache.Anderen Projekt, das gut funktioniert, ist udis86 .
mov
einen Algorithmus.