Intel-Maschinencode zu Assemblercode Frage

8

Experten, ich frage mich, die Intel x86 machineCode / AssemblyCode-Konvertierung ist singleSide oder bothSide?

bedeutet: assemblyCode --- & gt; machineCode und machineCode --- & gt; assemblyCode sind beide verfügbar.

da der x86 machineCode in der Größe variiert (1-15 Byte) und der Opcode in (1-3 Byte) variiert, wie kann man feststellen, dass ein Opcode 1 Byte oder 2 Byte oder 3 Byte ist?

und ich fand nie das Beispiel Präfix von x86-Instruktionen, hier, wenn 1 Byte-Präfix ist, wie Sie feststellen, es Präfix oder Opcode ist?

sicherlich, der AssemblyCode --- & gt; machineCode, die Identität von mnemonics + oprand [w / b] kann bestimmen, was die Antwort machineCode ist, indem bestimmte MappingTable gemappt werden.

, aber wenn der Prozess umgekehrt wird:

{bbbbbbbb, bbbbbbbb, bbbbbbbb, // Anweisung1   bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, // Anweisung2   bbbbbbbb, bbbbbbbb // Anweisung3 }

---- & gt; {Bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb}

Ich weiß nicht, was die signifikanten Bits oder Byts, um zu bestimmen, wie lange (welche Größe) eine Anweisung ist.

würde jemand sagt mir, wie das bestimmen? (Die Größe des Opcode, das Präfix Beispiel.) Dank für die Hilfe.

    
Johnny 09.03.2010, 14:18
quelle

3 Antworten

3

Die benötigten Informationen finden Sie in Intel® 64 und IA-32 ArchitecturesSoftware-Entwicklerhandbuch Band 2B: Befehlssatz Referenz, NZ . Sehen Sie sich Anhang A an, es enthält alles, was Sie brauchen.

    
torak 09.03.2010, 14:29
quelle
3

Nicht sicher, was Sie erreichen möchten, aber da die Anweisungen variable Länge haben, ist der einzige Weg, um sicherzugehen, dass Sie den korrekt disassemblierten Code zurückbekommen, mit einer bekannten Startadresse zu beginnen. In der Regel starten Disassembler vom Startpunkt des Programms und disassemblieren dann alle aufgerufenen Methoden rekursiv.

Dies führt jedoch zu Situationen, in denen einige Code-Chunks nicht zerlegt werden, weil sie aus einer Funktionstabelle oder ähnlichen Situationen aufgerufen werden können. Daher benötigt sie normalerweise Hilfe von einem Menschen, um zu sehen, ob die restlichen Abschnitte Code oder Daten sind >     

rslite 09.03.2010 14:25
quelle
2
  

da der x86 machineCode unterschiedlich ist   Größe (1-15 Byte) und Opcode variieren in   (1-3 Byte), wie man einen Opcode bestimmt   ist 1byte oder 2byte oder 3byte?

Die Größe der Anweisung wird implizit durch den Befehls- und Adressmodus definiert. Sie müssen die ISA ein Byte nach dem anderen überprüfen, was dem Byte folgen kann und sollte.

  

und ich habe nie das Beispiel gefunden   Präfix von x86-Anweisungen, wenn hier ist   1 Byte Präfix, wie es zu bestimmen ist   Präfix oder Opcode?

Beispielsweise ist das Präfix der Operandengröße (66h) immer ein Präfix.

    
Jens Björnhager 09.03.2010 14:25
quelle

Tags und Links