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.
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
@Oded, googeln für "x86 0x48 Befehlspräfix" ist ziemlich schwierig, wenn Sie nicht wissen, was Sie suchen ... – Griwes
@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