Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Disassembler: Länge der Instruction / Flags vorhanden? (https://www.delphipraxis.net/125218-disassembler-laenge-der-instruction-flags-vorhanden.html)

Apollonius 3. Dez 2008 18:00

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.

Zacherl 3. Dez 2008 18:34

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:
add bl, [456]
add ebx, [456]
Erzeugen beispielsweise das selbe ModRM Byte (Mod 0, Reg 3, RM 5). Jetzt weiß ich nicht, welches Register effektiv verwendet wurde.

EDIT: Shiat :mrgreen: Nur verguckt .. Einmal ist Opcode 3 und einmal 2. Aber die Referenz wäre trotzdem cool :)

Apollonius 3. Dez 2008 18:55

Re: Disassembler: Länge der Instruction / Flags vorhanden?
 
Zitat:

Zitat von Zacherl
Gibts die Intel Dokumentation für die Instructions irgendwo im PDF Format oder so?

Ich habe mich schon gefragt, wann du dich danach erkundigen würdest. Hier wirst du fündig. Die anderen Handbücher wie z.B. der System Programming Guide sind als Lektüre übrigens auch recht interessant.

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.
Seite 2 von 2     12   

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