وحدة MLDE32UNIT ؛ // واجهة محرك Disassembler الطول الدقيق // 作者忘记了 , 不好意思。好像出自 29A-7。 // آسف ، المؤلف! دالة LDE32 (الرمز opcy: مؤشر): عدد صحيح ؛ وظيفة التنفيذ LDE32 (OPCODE: POINTER): عدد صحيح ؛ const // **************** //*opcode أنواع*// *********************** 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): integer ؛ ASM pushad cld xor edx ، edx mov esi ، [esp+(8*4) +4] mov ebp ، esp // 256 bytes ، push table type type push 01097f71ch push 0f71c6780h push 017389718h push 0101cb718h push 017302c17h 01817h 04C103748H PUSH 0272CE7F7H PUSH 0F7AC6087H PUSH 01C121C52H PUSH 07C10871CH PUSH 0201C701CH PUSH 04767602BH PUSH 020211011H PUSH 0401216H 0 دفع 13H 028858260H دفع 015124045H الدفع 05016A0C7H الدفع 028191812H PUSH 0F2401812H PUSH 019154127H PUSH 050F0F011H MOVE ، 015124710H PUSH ECX PUSH 047101115H mov eax ، 012472015h push eax push push 012471a10h add cl ، 10h push ecx sub cl ، 20h push ecx xor ecx ، ecx dec ecx // code @ps: inc ecx mov edi ، esp esp: lodsb mov bh bh ، al ft: mov ah ، [edi] inc edi sh ، 4 sub al ، ah jnc ft mov al ، i7: inc edx cmp al ، o_unique jzno t_exit cmp al ، o_prefix jz. (8*4). 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 al ، 66h repnz scasb popad jnz @c32 D2: DEC EDX DEC edx edx c32: CMP AL ، O_MODRM32 jzno_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 Byte*// * * // * 7 6 5 3 2 0 * // * | وزارة الدفاع | ريج/opcode | R/M | *//**// ********************************* t_modrm: lodsb mov ah ، al sh al ، 7 jb prmk jz @prm add dl ، 4 pushad mov al ، 67h repnz scasb popad jnz prmn d3: sub dl ، 3 dec al prmk: PRM: و AH ، 00000111B Pushad mov al ، 67h repnz scasb popad jz @prm67chk cmp ah ، 04h jzib cmp ah ، 05h jnz _exitprm5chk DL ، 4 jmp t_exit prm67chk: cmp ax ، 0600H JNZ @inciT inc edx jmp i1 @prmSib: INC edx jmp @i42 // **************************** //*Process Opcodes Weird*//*//* اختبار سخيف (F6H/F7H)*//**// **************************** T_Weird: Test Byte Ptr [ ESI] ، 00111000B JNZ _MODRM MOV AL ، O_MODRM8 SHR BH ، 1 ADC AL ، 0 JMP I5 // ********************** ****: ************************* t_imm32: Sub BH ، 0A0H CMP BH ، 04H JAE. chk66tn d4: dec edx edx edx chk66t: pushad mov al ، 66h repnz scasb popad jz@i1 jnznz d2 end ؛ ابدأ ASM Push Opcode Call MLDE32 إضافة ESP ، 4 نهاية ؛ نهاية؛ نهاية. ========= 完