หน่วย MLDE32UNIT; // อินเทอร์เฟซเครื่องยนต์ Disassembler ความยาวขนาดเล็ก // 作者忘记了, 不好意思。好像出自 29a-7 。 // ขออภัยผู้แต่ง! ฟังก์ชั่น LDE32 (opcode: ตัวชี้): จำนวนเต็ม; ฟังก์ชั่นการใช้งาน LDE32 (opcode: ตัวชี้): จำนวนเต็ม; 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_extended = 10; o_weird = 11; o_error = 12; ฟังก์ชั่น MLDE32 (opcode: ตัวชี้): จำนวนเต็ม; ASM PUSHAD CLD XOR EDX, EDX MOV ESI, [ESP+(8*4) +4] MOV EBP, ESP // 256 ไบต์, ตาราง OPCODE ที่บีบอัดดัชนีกด 01097F71CH PUSH 0F71C6780H PUSH 017389718H 0101CB718H การผลัก 04C103748H PUSH 0272CE7F7H PUSH 0F7AC6087H PUSH 01C121C52H PUSH 07C10871C 13H PUSH 028858260H PUSH 015124045H PUSH 05016A0C7H PUSH 028191812H PUSH 0F2401812H PUSH 019154127H PUSH 050F0F011H MOV ECX, 015124710H ผลักดัน ECX 011115 047101115H MOV EAX, 012472015H ผลักดัน EAX PUSH EAX PUSH 012471A10H เพิ่ม CL, 10H PUSH ECX SUB CL, 20H PUSH ECX XOR ECX, ECX DEC ECX // รหัสเริ่ม @@ PS: INC ECX MOV EDI , 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 ป๊อป 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 (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 @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 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 // ******************************************************************************************************************* * * // * 7 6 5 3 2 0 * // * | mod | reg/opcode | r/m | *//**// ********************************* @@ t_modrm: lodsb mov ah, al, al shr อัล, 7 jb @@ prmk jz @@ prm เพิ่ม dl, 4 pushad mov al, 67h repnz scasb popad jnz @@ prm @@ d3: sub dl, 3 dec al @@ prmk: jnz @@ t_exit inc edx inc ex @@@ @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 jz @t_exit @ dl, 4 jmp @@ t_exit @@ prm67chk: cmp axe, 0600h jnz @@ t_exit inc edx jmp @@ i1 @@ prmsib: cmp al, 00h jnz @@ i1 lodsb และ al, 00000111b sub al, 05h jnz @ @ Inc edx jmp @@ i42 // ******************************************************************************** การทดสอบร่วมเพศ (f6h/f7h)*//**// ************************** @@ t_weird: ทดสอบไบต์ ptr [ 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 เพิ่ม ESP, 4 End; จบ; จบ. ========= 完