Re: Disassembler: Länge der Instruction / Flags vorhanden?
Bist du dir sicher bezüglich 2E und 3E? Die Intel-Handbücher erwähnen nur folgende Formen für mehrbytige Opcodes:
0F - ein weiteres Byte 66/F2/F3 - 0F - ein weiteres Byte 0F - zwei weitere Bytes 66 - 0F - zwei weitere Bytes Daher sind lediglich 66, F2 und F3 doppeldeutig, da sie als Flag-Präfix und als "mandatory prefix" für SIMD-Anweisungen auftauchen. Als Unterscheidungsmerkmal wird ausdrücklich das 0F-"escape opcode"-Byte genannt. F2 und F3 sind Repeat-Präfixe, die nur bei String-Anweisungen vorkommen, und 66 ist das Operandengröße-Präfix. Beides gibt bei SIMD-Anweisungen keinen Sinn. Zu prüfen bleibt damit lediglich, wie viele Opcode-Bytes nach dem Escape Opcode Byte noch folgen. Hierfür solltest du dir eine Tabelle erstellen. |
Re: Disassembler: Länge der Instruction / Flags vorhanden?
Ja meinte F2 und F3, oki also es klappt jetzt, dass ich 1-Byte Opcodes erkenne, 2-Byte Opcodes mit 0F am Anfang und 3-Byte Opcodes mit 66/F2/F3-F0-XX. Fehlt noch 66-0F-XX-XX, die ich dann per Tabelle prüfen werde. Bei F2, etc prüfe ich einfach, ob direkt danach 0F kommt.
Gibts die Intel Dokumentation für die Instructions irgendwo im PDF Format oder so? Habe das hier gefunden: http://gec.di.uminho.pt/Discip/Lesi/...4ISAformat.pdf Soweit ganz nett erklärt, wobei ich bei der 32 Bit Tabelle fürs ModRM Byte nicht weiterkomme.
Code:
Erzeugen beispielsweise das selbe ModRM Byte (Mod 0, Reg 3, RM 5). Jetzt weiß ich nicht, welches Register effektiv verwendet wurde.
add bl, [456]
add ebx, [456] EDIT: Shiat :mrgreen: Nur verguckt .. Einmal ist Opcode 3 und einmal 2. Aber die Referenz wäre trotzdem cool :) |
Re: Disassembler: Länge der Instruction / Flags vorhanden?
Zitat:
Das die beiden Anweisungen das selbe ModR/M-Byte haben, ist klar. Es wird nur zwischen verschiedenen Register-Kategorien unterschieden. ebx, bx und bl fallen beispielsweise in eine Kategorie. Die Operanden-Größe kennst du aus dem Opcode (dort kannst du zwischen 8 und 16/32 Bit unterscheiden), den Einstellungen des Code-Segments (16 oder 32 Bit, in Windows immer 32 Bit solange du keine speziellen Vorkehrungen für 16-Bit-Programme unternimmst) und dem Override Prefix, welches die Einstellung des Code-Segments umkehrt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz