ユニットMLDE32UNIT; // Micro Length Resasembler Engine Interface //作者忘记了、不好意思。好像出自29A-7。//ごめんなさい、著者!関数lde32(opcode:pointer):整数;実装関数LDE32(opcode:pointer):整数; const // *************** //*opcode Types*// **************** 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_extended = 10; o_weird = 11; O_ERROR = 12;関数mlde32(opcode:pointer):整数; ASM Pushad CLD XOR EDX、EDX MOV ESI、[ESP+(8*4)+4] MOV EBP、ESP // 256バイト、インデックス圧縮オプコードタイプテーブルプッシュ0F71C6780Hプッシュ017389718Hプッシュ0101CB718Hプッシュ017302C17Hプッシュ01817H 04C103748Hプッシュ0272CE7F7Hプッシュ0F7AC6087Hプッシュ01C121C52Hプッシュ07C10871CHプッシュ04767602H 13Hプッシュ028858260Hプッシュ015124045Hプッシュ05016A0C7Hプッシュ028191812Hプッシュ0F2401812Hプッシュ019154127Hプッシュ050F0F011H MOV ECX、015124710H 0471011115H MOV EAX、012472015H PUSH EAX PUSH EAX PUSH 012471A10H ADD CL、10H PUSH ECX SUB、20H PUSH ECX XOR ECX、ECX DEC ECX // CODE STARTS:INC ECX MOV EDI、ESP @@ GO:LODSB MOV BHH 、al @@ ft:mov ah、[edi] inc edi sh ah、4 sub al、ah jnc @@ ft mov al、[edi-1] and al、0fh cmp al、o_error jnz @@ i7 pop edx not edx @@ i7:inc edx cmp al、o_unique Jz @@ t_exit cmp al、o_prefix Jz @@ ps add edi、51h //(@@ _ ettbl- @@ _ ttbl) (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_weird @@ i5:inc edx cmp al、o_imm16 Jz @ @t_exit cmp al、o_modrm8 jz @@ t_modrm @@ i4:inc edx cmp al、o_imm24 jz @@ t_exit @@ i3:inc edx @@ i2:inc edx pushad mov al、66h repnz scasb popad jnz @@ c32 @ @ @ @ @ @ @ @ @ @ @ @ @ @c32 D2:DEC EDX DEC EDX @@ C32:CMP AL、O_MODRM32 JZ @@ T_MODRM SUB AL、O_IMM32 JZ @@ T_IMM32 @@ I1:INC EDX @@ T_EXIT:MOV ESP、EBP MOV [ESP+(7*4)]、 edx popad ret // ***************************** //*mod/rmバイトを処理*// * * // * 7 6 5 3 2 0 * // * | mod | reg/opcode | r/m | *//**// ***************************** @@ t_modrm:Lodsb Mov Ah、Al Shr Al、7 jb @@ prmk jz @@ prm add dl、4 pushad mov al、67h repnz scasb popad jnz @@ prm @@ d3:sub dl、3 dec al @@ prmk:jnz @@ t_exit Inc edx inc eax @ @PRM:AH、000001111B Pushad Mov Al、67h Repnz Scasb Popad Jz @@ Prm67Chk Cmp Ah、04h Jz @@ Prmsib Cmp Ah、05h Jnz @@ t_exit @@ prm5chk:dec al jz @@ t_exit @ @i42:追加dl、4 jmp @@ t_exit @@ prm67chk:cmp ax、0600h jnz @@ t_exit edx jmp @@ i1 @@ prmsib:cmp al、00h jnz @@ i1 lodsb and al、00000111b sub al、05h jnz @ @i1 Inc Edx JMP @@ i42 // ************************* //*奇妙なOpCodes*//**//*クソテスト(F6H/F7H)*//**// ************************************ ESI]、00111000B JNZ @@ T_MODRM MOV AL、O_MODRM8 SHR BH、1 ADC AL、0 JMP @@ i5 // ********************** ********* //*他のたわごとを処理*//**//*fucking mov(a0h/a1h/a2h/a3h)*//**// ******** ***************************** @@ T_IMM32:sub bh、0a0h cmp bh、04h jae @@ d2 pushad mov al、67h repnz scasb popad jnz @@ chk66t @@ d4:dec edx dec edx @@ chk66t:pushad mov al、66h repnz scasb popad jz @@ i1 jnz @@ d2 end; asm push opcode call mlde32 add esp、4 endを開始します。終わり;終わり。 =========完