Länge von x86 instruktionen
-
Hallo und ein frohes neues!
ich möchte einen kleines disassembler schreiben. damit das funktioniert muss
ich aber die länge eines befehls herrausfinden. ich habe nur ein zeiger auf
die befehlsfolge.kann man die länge am ersten byte sicher ablesen?
gibt es einen logischen zusammenhang zwischen ersten byte und der länge,
oder muss man das anhand einer tabelle zuordnen?
-
Unter http://sandpile.org/ia32/index.htm unter der Überschrift "opcodes" solltest du alles Finden, was du wissen willst.
-
Hi.
kann man die länge am ersten byte sicher ablesen?
gibt es einen logischen zusammenhang zwischen ersten byte und der länge,
oder muss man das anhand einer tabelle zuordnen?Nur am ersten Byte kann man die Länge einer Instruktion nicht ablesen. Am einfachsten ist es wohl, wenn du eine Tabelle erstellst, in der du festhälst, ob ein Opcode ein ModR/M und einen konstanten Wert (8bit, 16bit oder 32bit) enthält. Aus dem ModR/M Byte kann man dann herausfinden, ob ein SIB-Byte und ein Displacement vorhanden ist. Genaueres findest du in dem Link von ProgChild. Zusätzlich muss dein Programm in der Lage sein die Präfixe zu verarbeiten. Schau dir doch mal die LDE von Z0mbie an. Der Quelltext schwirrt irgendwo im Netz. Da kannst du auch die Tabelle übernehmen und musst sie nicht selbst erstellen.
-
Hier ist der Coue zu einem fertigen Disassembler