Die Größe von ASM-Befehelen herausfinden

Hallo!
Ich habe da ein kleines Problem:
Ich möchte gerne in einem String, aus Prozessorbefehlen, ein Paar bestimmte Befehle finden. Also z.B. in
Code:
0x66 0x40 0x40 0x66 0x41
alle inc ax Befehle. Jetzt ist es aber so, dass ich nicht einfach nach 0x40 suchen kann weil ich ja sonst z.B. den inc eax Befehl als einen inc ax Befehl interpretieren würde.
Es wäre also echt gut wenn man irgendwie die länge der einzelnen Assembler befehele erkennen könnte. Wie macht man das?

mfg st4cky
 
Also ich habe unter anderem sowas gefunden: https://thunked.org/programming/ldas-length-disassembler-t33.html


das sieht aber ziemlich groß aus im vergleich zu dem hier:
http://www.thehackademy.net/madchat/vxdevl/vxmags/rrlf6/viruses/Grip/include/lde32bin.inc

Das soll aber angeblich auch funktionieren...

Das Mod/RM Byte und das SIB Byte helfen ja schon die größe der Operation zu erkennen die Frage ist nur, wie ich erkenne ob die Opcodes ein Mod oder/und SIB Byte haben.
Muss ich da alle möglichen OpCodes einmal durch gehen oder gibt es da nen Trick?
 
Muss ich da alle möglichen OpCodes einmal durch gehen oder gibt es da nen Trick?

Das ist es ja gerade. Es kommt auf zig Sachen an. Es gibt bestimmte Opcode-Groups mit und ohne fixer Länge, aber auch mehrbyte-Opcodes, Prefixes (wie oben im Beispiel), Opcodes mit MOD R/M wonach sich entscheidet ob ein SIB Byte folgt oder Daten, die verschieden lang sein können...

Hier sieht man es doch gut:
http://clueless.insomnia247.nl/stuff/disas/src/ldas.c
 
Nö, nicht unbedingt. Was ist mit NOP, INC, DEC, HLT, PUSH, POP, J(N)E, J(N)O, J(N)S, J(N)A oder CALL, JMP (ohne reg).... und mehr
 
Zurück
Oben