единица MLDE32UNIT; // Micro длины интерфейс двигателя // 作者忘记了 作者忘记了 不好意思。好像出自 不好意思。好像出自 29A-7。 // Извините, автор! Функция LDE32 (OPCODE: POONTER): Integer; Функция реализации LDE32 (OpCode: Pointer): Integer; const // **************** //*Типы Opcode*// *************** O_UNIQUE = 0; O_prefix = 1; O_imm8 = 2; O_imm16 = 3; O_imm24 = 4; O_imm32 = 5; O_imm48 = 6; O_modrm = 7; O_modrm8 = 8; O_modrm32 = 9; O_exted = 10; O_weird = 11; O_ERROR = 12; Функция mlde32 (OpCode: Pointer): Integer; ASM Pushad CLD XOR EDX, EDX MOV ESI, [ESP+(8*4) +4] MOV EBP, ESP // 256 байт, индексная таблица типа OPCODE 01097F71CH толкание 04C103748H Push 0272CE7F7H Push 0F7AC6087H PUSH 01C121C52H PUSH 07C10871CH PUST 0201C701CH PUST 04767602BH PUST 020211011H PUSH 040121625H Push 082872022H 13H Push 028858260H Push 015124045H Push 05016A0C7H Push 028191812H Push 0F2401812H Push 019154127H Push 050F0F011H MOV ECX, 015124710H Push Push 01111247H7H111111112H1111112H1111112H1111112H111112H111112H1112H111112H1111121112H1112H111111211211112H11121112111211210H. 047101115H Move Eax, 012472015H Push eax push eax push 012471a10h Добавить Cl, 10H push ecx sub cl, 20h push ecx xor ecx, ecx dec ecx // code Starts @@ ps: ecx ov edi, esp @@ go: lodsb mov bh // cod , al @@ ft: mov ah, [edi] inc edi shr ah, 4 sub al, ah jnc @@ ft mov al, [edi-1] и al, 0fh cmp al, o_error jnz @@ i7 pop edx не Edx @@ i7: Inc edx cmp al, o_unique jz @@ t_exit cmp al, o_prefix jz @@ ps добавить Edi, 51h // (@@ _ ettbl - @@ _ ttbl) cmp al, o_extended jz @@ go mov edi, [ebp+ (8*4) +4] @@ i6: inc edx cmp al, o_imm8 jz @@ t_exit cmp al, o_modrm jz @@ t_modrm cmp al, o_weird jz @ @t_exit cmp al, o_modrm8 jz @@ t_modrm @@ i4: inc edx cmp al, o_imm24 jz @@ t_exit @@ i3: inc edx @@ i2: edx pushad mov, 66h repnz scas D2: Dec Edx dec edx @@ c32: cmp al, o_modrm32 jz @@ t_modrm sub al, o_imm32 jz @@ t_imm32 @@ i1: inc edx @@ te_exit: move esp, ebp mov [esp+(7*4)], EDX Popad ret // ********************************* //*Обработайте мод/rm byte*// * * // * 7 6 5 3 2 0 * // * | Мод | Reg/opcode | R/M | *//**// ******************************* AL, 7 jb @@ prmk jz @@ prm Добавить DL, 4 Pushad Move Al, 67h repnz scasb popad jnz @@ prm @@ d3: sub dl, 3 dec al @@ prmk: jnz @@ t_exit inc edx inc @ @ @ @ @ @prm: и ah, 00000111b pushad mov al, 67h repnz scasb popad jz @@ prm67chk cmp ah, 04h jz @@ prmsib cmp ah, 05h jnz @@ t_exit @@ prm5chk: dec al @@ t_exit @i42: Добавить @@ prm5chk: dec al @ DL, 4 jmp @@ t_exit @@ prm67chk: cmp ax, 0600h jnz @@ t_exit inc edx jmp @@ i1 @@ prmsib: cmp al, 00h jnz @@ i1 lodsb and al, 00000111b sub, 05h jnz @@ i1 INC EDX JMP @@ i42 // ****************************** //*Процесс странные Opcodes*//**//** Чертовски тест (f6h/f7h)*//**// ************************** esi], 001111000b jnz @@ t_modrm mov al, o_modrm8 shr bh, 1 adc al, 0 jmp @@ i5 // ******************************* ********* //*Обработайте какое -то другое дерьмо*//**//*чертово движение (A0H/A1H/A2H/A3H)*//**// ******** ************************* @@ CHK66T @@ D4: DEC EDX DEC EDX @@ CHK66T: PUSHAD MOV AL, 66H Repnz SCASB POPAD JZ @@ I1 JNZ @@ D2 END; начинать asm push opcode call mlde32 добавить ESP, 4 End; конец; конец. ========= 完