lde16 beta 18.12.04 набор команд 8086 ограничен, и мы можем с большой вероятностью предсказывать длину команды, когда известен только ее первый байт, не разбирая строение самой команды (mod r/m). также см. lde32 by z0mbie, with respect ; ------------- first step.... начальные сведения (debug.exe) 2AC4:0100 00FF ADD BH,BH 2AC4:0102 01FF ADD DI,DI 2AC4:0104 02FF ADD BH,BH 2AC4:0106 03FF ADD DI,DI 2AC4:0108 04FF ADD AL,FF 2AC4:010A 05FFFF ADD AX,FFFF 2AC4:010D 06 PUSH ES 2AC4:010E 07 POP ES 2AC4:010F 08FF OR BH,BH 2AC4:0111 09FF OR DI,DI 2AC4:0113 0AFF OR BH,BH 2AC4:0115 0BFF OR DI,DI 2AC4:0117 0CFF OR AL,FF 2AC4:0119 0DFF52 OR AX,52FF 2AC4:011C 0E PUSH CS 2AC4:011D 0F DB 0F 2xxx:01xx 10FF ADC BH,BH 2AC4:0120 11FF ADC DI,DI 2AC4:0122 12FF ADC BH,BH 2AC4:0124 13FF ADC DI,DI 2AC4:0126 14FF ADC AL,FF 2AC4:0128 15FFFF ADC AX,FFFF 2AC4:012B 16 PUSH SS 2AC4:012C 17 POP SS 2AC4:012D 18FF SBB BH,BH 2AC4:012F 19FF SBB DI,DI 2AC4:0131 1AFF SBB BH,BH 2AC4:0133 1BFF SBB DI,DI 2AC4:0135 1CFF SBB AL,FF 2AC4:0137 1DFFFF SBB AX,FFFF 2AC4:013A 1E PUSH DS 2AC4:013B 1F POP DS 2xxx:01xx 20FF AND BH,BH 2xxx:01xx 21FF AND DI,DI 2AC4:0140 22FF AND BH,BH 2AC4:0142 23FF AND DI,DI 2AC4:0144 24FF AND AL,FF 2AC4:0146 25FFFF AND AX,FFFF 2AC4:0149 26 ES: 2AC4:014A 27 DAA 2AC4:014B 28FF SUB BH,BH 2AC4:014D 29FF SUB DI,DI 2AC4:014F 2AFF SUB BH,BH 2AC4:0151 2BFF SUB DI,DI 2AC4:0153 2CFF SUB AL,FF 2AC4:0155 2DFFFF SUB AX,FFFF 2AC4:0158 2E CS: 2AC4:0159 2F DAS 2AC4:015A 30FF XOR BH,BH 2AC4:015C 31FF XOR DI,DI 2AC4:015E 32FF XOR BH,BH 2AC4:0160 33FF XOR DI,DI 2AC4:0162 34FF XOR AL,FF 2AC4:0164 35FFFF XOR AX,FFFF 2AC4:0167 36 SS: 2AC4:0168 37 AAA 2AC4:0169 38FF CMP BH,BH 2AC4:016B 39FF CMP DI,DI 2AC4:016D 3AFF CMP BH,BH 2AC4:016F 3BFF CMP DI,DI 2AC4:0171 3CFF CMP AL,FF 2AC4:0173 3DFFFF CMP AX,FFFF 2AC4:0176 3E DS: 2AC4:0177 3F AAS 2xxx:0100 40 INC AX 2xxx:0101 41 INC CX 2xxx:0102 42 INC DX 2xxx:0103 43 INC BX 2xxx:0104 44 INC SP 2xxx:0105 45 INC BP 2xxx:0106 46 INC SI 2xxx:0107 47 INC DI 2xxx:0108 48 DEC AX 2xxx:0109 49 DEC CX 2xxx:010A 4A DEC DX 2xxx:010B 4B DEC BX 2xxx:010C 4C DEC SP 2xxx:010D 4D DEC BP 2xxx:010E 4E DEC SI 2xxx:010F 4F DEC DI 2xxx:0110 50 PUSH AX 2xxx:0111 51 PUSH CX 2xxx:0112 52 PUSH DX 2xxx:0113 53 PUSH BX 2xxx:0114 54 PUSH SP 2xxx:0115 55 PUSH BP 2xxx:0116 56 PUSH SI 2xxx:0117 57 PUSH DI 2xxx:0118 58 POP AX 2xxx:0119 59 POP CX 2xxx:011A 5A POP DX 2xxx:011B 5B POP BX 2xxx:011C 5C POP SP 2xxx:011D 5D POP BP 2xxx:011E 5E POP SI 2xxx:011F 5F POP DI 2xxx:0120 60 DB 60 2xxx:0121 61 DB 61 2xxx:0122 62 DB 62 2xxx:0123 63 DB 63 2xxx:0124 64 DB 64 2xxx:0125 65 DB 65 2xxx:0126 66 DB 66 2xxx:0127 67 DB 67 2xxx:0128 68 DB 68 2xxx:0129 69 DB 69 2xxx:012A 6A DB 6A 2xxx:012B 6B DB 6B 2xxx:012C 6C DB 6C 2xxx:012D 6D DB 6D 2xxx:012E 6E DB 6E 2xxx:012F 6F DB 6F 2xxx:0130 70FF JO 0131 2xxx:0132 71FF JNO 0133 2xxx:0134 72FF JB 0135 2xxx:0136 73FF JNB 0137 2xxx:0138 74FF JZ 0139 2xxx:013A 75FF JNZ 013B 2xxx:013C 76FF JBE 013D 2xxx:013E 77FF JA 013F 2xxx:0140 78FF JS 0141 2xxx:0142 79FF JNS 0143 2xxx:0144 7AFF JPE 0145 2xxx:0146 7BFF JPO 0147 2xxx:0148 7CFF JL 0149 2xxx:014A 7DFF JGE 014B 2xxx:014C 7EFF JLE 014D 2xxx:014E 7FFF JG 014F 2AC4:0150 80FFFF CMP BH,FF 2AC4:0153 81FFFFFF CMP DI,FFFF 2AC4:0157 82FFFF CMP BH,FF 2AC4:015A 83FFFF CMP DI,-01 2AC4:015D 84FF TEST BH,BH 2AC4:015F 85FF TEST DI,DI 2AC4:0161 86FF XCHG BH,BH 2AC4:0163 87FF XCHG DI,DI 2AC4:0165 88FF MOV BH,BH 2AC4:0167 89FF MOV DI,DI 2AC4:0169 8AFF MOV BH,BH 2AC4:016B 8BFF MOV DI,DI 2AC4:016D 8CFF MOV DI,DS 2AC4:016F 8DFF LEA DI,DI 2AC4:0171 8EFF MOV DS,DI 2AC4:0173 8FFF POP DI 2xxx:0100 90 NOP 2xxx:0101 91 XCHG CX,AX 2xxx:0102 92 XCHG DX,AX 2xxx:0103 93 XCHG BX,AX 2xxx:0104 94 XCHG SP,AX 2xxx:0105 95 XCHG BP,AX 2xxx:0106 96 XCHG SI,AX 2xxx:0107 97 XCHG DI,AX 2xxx:0108 98 CBW 2xxx:0109 99 CWD 2xxx:010A 9AFFFFFFFF CALL FFFF:FFFF 2xxx:010F 9B WAIT 2xxx:0110 9C PUSHF 2xxx:0111 9D POPF 2xxx:0112 9E SAHF 2xxx:0113 9F LAHF 2xxx:0114 A0FFFF MOV AL,[FFFF] 2xxx:0117 A1FFFF MOV AX,[FFFF] 2xxx:011A A2FFFF MOV [FFFF],AL 2xxx:011D A3FFFF MOV [FFFF],AX 2xxx:0120 A4 MOVSB 2xxx:0121 A5 MOVSW 2xxx:0122 A6 CMPSB 2xxx:0123 A7 CMPSW 2xxx:0124 A8FF TEST AL,FF 2xxx:0126 A9FFFF TEST AX,FFFF 2xxx:0129 AA STOSB 2xxx:012A AB STOSW 2xxx:012B AC LODSB 2xxx:012C AD LODSW 2xxx:012D AE SCASB 2xxx:012E AF SCASW 2xxx:012F B0FF MOV AL,FF 2xxx:0131 B1FF MOV CL,FF 2xxx:0133 B2FF MOV DL,FF 2xxx:0135 B3FF MOV BL,FF 2xxx:0137 B4FF MOV AH,FF 2xxx:0139 B5FF MOV CH,FF 2xxx:013B B6FF MOV DH,FF 2xxx:013D B7FF MOV BH,FF 2xxx:013F B8FFFF MOV AX,FFFF 2xxx:0142 B9FFFF MOV CX,FFFF 2xxx:0145 BAFFFF MOV DX,FFFF 2xxx:0148 BBFFFF MOV BX,FFFF 2xxx:014B BCFFFF MOV SP,FFFF 2xxx:014E BDFFFF MOV BP,FFFF 2xxx:0151 BEFFFF MOV SI,FFFF 2xxx:0154 BFFFFF MOV DI,FFFF 2xxx:0100 C0 DB C0 2xxx:0101 C1 DB C1 2xxx:0102 C2FFFF RET FFFF 2xxx:0105 C3 RET 2xxx:0106 C4FF LES DI,DI 2xxx:0108 C5FF LDS DI,DI 2xxx:010A C6FFFF MOV BH,FF 2xxx:010D C7FFFFFF MOV DI,FFFF 2xxx:0111 C8 DB C8 2xxx:0112 C9 DB C9 2xxx:0113 CAFFFF RETF FFFF 2xxx:0116 CB RETF 2xxx:0117 CC INT 3 2xxx:0118 CDFF INT FF 2xxx:011A CE INTO 2xxx:011B CF IRET 2xxx:0100 D0FF SAR BH,1 2xxx:0102 D1FF SAR DI,1 2xxx:0104 D2FF SAR BH,CL 2xxx:0106 D3FF SAR DI,CL 2xxx:0108 D4FF AAM FF 2xxx:010A D5FF AAD FF 2xxx:010C D6 DB D6 2xxx:010D D7 XLAT 2xxx:010E D8FF FDIVR ST,ST(7) 2xxx:0110 D900 FLD DWORD PTR [BX+SI] 2xxx:0112 DAFF ESC 17,BH 2xxx:0114 DBFF ESC 1F,DI 2xxx:0116 DCFF FDIV ST(7),ST 2xxx:0118 DDFF ESC 2F,DI 2xxx:011A DEFF FDIVP ST(7),ST 2xxx:011C DFFF ESC 3F,DI 2AC4:011E E0FF LOOPNZ 011F 2AC4:0120 E1FF LOOPZ 0121 2AC4:0122 E2FF LOOP 0123 2AC4:0124 E3FF JCXZ 0125 2AC4:0126 E4FF IN AL,FF 2AC4:0128 E5FF IN AX,FF 2AC4:012A E6FF OUT FF,AL 2AC4:012C E7FF OUT FF,AX 2AC4:012E E8FFFF CALL 0130 2AC4:0131 E9FFFF JMP 0133 2AC4:0134 EAFFFFFFFF JMP FFFF:FFFF 2AC4:0139 EBFF JMP 013A 2AC4:013B EC IN AL,DX 2AC4:013C ED IN AX,DX 2AC4:013D EE OUT DX,AL 2AC4:013E EF OUT DX,AX 2AC4:0100 F0 LOCK 2AC4:0101 F1 DB F1 2AC4:0102 F2 REPNZ 2AC4:0103 F3 REPZ 2AC4:0104 F4 HLT 2AC4:0105 F5 CMC 2AC4:0106 F6FF IDIV BH 2AC4:0108 F7FF IDIV DI 2AC4:010A F8 CLC 2AC4:010B F9 STC 2AC4:010C FA CLI 2AC4:010D FB STI 2AC4:010E FC CLD 2AC4:010F FD STD 2AC4:0110 FEFF ??? BH 2AC4:0112 FFFF ??? DI ; ------------------------------ second step..... делаем подобие таблицы ручками >:) ; table ; 1 -fizst opcode ; -2 -size 00,2 01,2 02,2 03,2 04,2 05,3 06,1 07,1 08,2 09,2 0a,2 0b,2 0c,2 0d,3 0e,1 0f,1 10,2 11,2 12,2 13,2 14,2 15,3 16,1 17,1 18,2 19,2 1a,2 1b,2 1c,2 1d,3 1e,1 1f,1 20,2 21,2 22,2 23,2 24,2 25,3 26,1 27,1 28,2 29,2 2a,2 2b,2 2c,2 2d,3 2e,1 2f,1 30,2 31,2 32,2 33,2 34,2 35,3 36,1 37,1 38,2 39,2 3a,2 3b,2 3c,2 3d,3 3e,1 3f,1 40,1 41,1 42,1 43,1 44,1 45,1 46,1 47,1 48,1 49,1 4a,1 4b,1 4c,1 4d,1 4e,1 4f,1 50,1 51,1 52,1 53,1 54,1 55,1 56,1 57,1 58,1 59,1 5a,1 5b,1 5c,1 5d,1 5e,1 5f,1 60,1 61,1 62,1 63,1 64,1 65,1 66,1 67,1 68,1 69,1 6a,1 6b,1 6c,1 6d,1 6e,1 6f,1 70,2 71,2 73,2 74,2 75,2 76,2 77,2 78,2 79,2 7a,2 7b,2 7c,2 7d,2 7e,2 7f,2 80,3 81,4 82,3 83,3 84,2 85,2 86,2 87,2 88,2 89,2 8a,2 8b,2 8c,2 8d,2 8e,2 8f,2 90,1 91,1 92,1 93,1 94,1 95,1 96,1 97,1 98,1 99,1 9a,5 9b,1 9c,1 9d,1 9e,1 9f,1 a0,3 a1,3 a2,3 a3,3 a4,1 a5,1 a6,1 a7,1 a8,2 a9,3 aa,1 ab,1 ac,1 ad,1 ae,1 af,1 b0,2 b1,2 b2,2 b3,2 b4,2 b5,2 b6,2 b7,2 b8,3 b9,3 ba,3 bb,3 bc,3 bd,3 be,3 bf,3 c0,1 c1,1 c2,3 c3,1 c4,2 c5,2 c6,3 c7,4 c8,1 c9,1 ca,3 cb,1 cc,1 ce,1 cf,1 d0,2 d1,2 d2,2 d3,2 d4,2 d5,2 d6,1 d7,1 d8,2 d9,2 da,2 db,2 dc,2 dd,2 de,2 df,2 e0,2 e1,2 e2,2 e3,2 e4,2 e5,2 e6,2 e7,2 e8,3 e9,3 ea,5 eb,2 ec,1 ed,1 ee,1 ef,1 f0,1 f1,1 f2,1 f3,1 f4,1 f5,1 f6,2 f7,2 f8,1 f9,1 fa,1 fb,1 fc,1 fd,1 fe,2 ff,2 ; --------------------- step three... вколачиваем наши изыскания в исходник исходный файл делится на блоки, которые выводятся на консоль tasm /w2/m2 *.asm tlink /x/t *.obj [cut] ; валитсо на 4-5 байтовых командах. .model tiny .code .radix 16 ;.186 org 0100 @suppa2: ; читаем образец по смещению cs:_buff mov ax,3d00 lea dx,_obrazec int 21 xchg bx,ax mov ah,3f ;mov cx,16384d mov cx,128d ;; <--- lea dx,_buff int 21 mov ds:[_dlina],ax mov ah,3e int 21 lea si,_buff ; _dlina -> cx push ds:[_dlina] ;; pop cx ;; @k22l: ;mov ax,ds:[si] lodsb dec si sub ah,ah lea di,_crunch ; no commentz add di,ax sub bx,bx ; counter (how much to out b4 break) mov bl,ds:[di] @litt: mov al,"." ;int 29 call @i29 ;mov ax,ds:[si] ;inc si lodsb call @byte dec cx jz @out dec bx jnz @litt ; был найден т.наз пробел @break: mov ax,0d0a ;int 29 call @i29 xchg ah,al ;int 29 call @i29 ;loop @k22l jmp @k22l @out: int 20 @i29: push ax dx ;; mov dl,al mov ah,2 int 21 pop dx ax ;; retn ;; ; вывод хексового значения. ; на входе в al значение, которое нужно принять. @byte: push ax bx ;; ; типа sub ah,ah mov ah,00 mov bl,10 div bl call @nib ;; xchg ah,al call @nib ;; pop bx ax ;; retn ;; @nib: cmp al,09 jbe @nib2 add al,07 ; add al,20 для маленьких букв @nib2: add al,30 ;int 29 call @i29 retn ;; ; @byte не менял ; простым текствовым компейром сравнивать _obrazec db "1.bin",00 _dlina dw 1234 _crunch: db 2,2,2,2,2,3,1,1 ;00 db 2,2,2,2,2,3,1,1 db 2,2,2,2,2,3,1,1 ;10 db 2,2,2,2,2,3,1,1 db 2,2,2,2,2,3,1,1 ;20 db 2,2,2,2,2,3,1,1 db 2,2,2,2,2,3,1,1 ;30 db 2,2,2,2,2,3,1,1 db 1,1,1,1,1,1,1,1 ;40 db 1,1,1,1,1,1,1,1 db 1,1,1,1,1,1,1,1 ;50 db 1,1,1,1,1,1,1,1 db 1,1,1,1,1,1,1,1 ;60 db 1,1,1,1,1,1,1,1 db 2,2,2,2,2,2,2,2 ;70 db 2,2,2,2,2,2,2,2 db 3,4,3,3,2,2,2,2 ;80 db 2,2,2,2,2,2,2,2 db 1,1,1,1,1,1,1,1 ;90 db 1,1,5,1,1,1,1,1 db 3,3,3,3,1,1,1,1 ;a0 db 2,3,1,1,1,1,1,1 db 2,2,2,2,2,2,2,2 ;b0 db 3,3,3,3,3,3,3,3 db 1,1,3,1,2,2,3,4 ;c0 db 1,1,3,1,1,2,1,1 db 2,2,2,2,2,2,1,1 ;d0 db 2,2,2,2,2,2,2,2 db 2,2,2,2,2,2,2,2 ;e0 db 3,3,5,2,1,1,1,1 db 1,1,1,1,1,1,2,2 ;f0 db 1,1,1,1,1,1,2,2 _buff: end @suppa2 [cut] [eof]