Подскажиет какие-нибудь простенькие архиваторы с исходниками на Asm для win32 не с графическим интерфейсом
Тебе просто алгоритмы сжатия? Тогда Google - он тебе описание и хафмана, и LZ выдаст. А реализовать и сам сможешь. Кстати, по сжатию тут где-то недавно пробегал топик
я писал консольный архиватор на алгоритме LZ. Он мог создавать многофайловые архивы. Правда я кудато затерял сорсы ((
изначально процедура была написана на си её декомпелирывали) Упаковка lzwGetRequiredMemSize(Dword bSize); вход размер не упакованых данных выход требуемый размер буфера lzwCompress(Byte *data, Dword bSize, Byte *buff); адрес буфера исходных даных размер буфера адрес буфера получаемых данных выход eax - размер упакованых данных распаковка точно токже, но lzwGetDecompressedSize(Byte *compressedData); zwDecompress(Byte *data, Dword bSize, Byte *buff); (процеруру распаковки не проверял, если) Код (Text): lzwGetRequiredMemSize@4 proc arg_0 = dword ptr 4 mov eax, [esp+arg_0] test eax, eax jnz short loc_402830 mov eax, 0Ch ret 4 loc_402830: test al, 1 jz short loc_402837 add eax, 1 loc_402837: lea eax, [eax+eax*2] shr eax, 1 add eax, 0Ch ret 4 lzwGetRequiredMemSize@4 endp lzwGetDecompressedSize@4 proc arg_0 = dword ptr 4 mov eax, [esp+arg_0] cmp dword ptr [eax], 21575A4Ch jz short loc_402C11 xor eax, eax ret 4 loc_402C11: mov eax, [eax+4] ret 4 lzwGetDecompressedSize@4 endp lzwCompress@12 proc arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_10 = dword ptr 14h arg_14 = dword ptr 18h arg_18 = dword ptr 1Ch arg_30 = byte ptr 34h arg_C02C = dword ptr 0C030h arg_C030 = dword ptr 0C034h arg_C034 = dword ptr 0C038h arg_C03B = byte ptr 0C03Fh arg_C03C = dword ptr 0C040h arg_C040 = dword ptr 0C044h arg_C044 = dword ptr 0C048h arg_C048 = dword ptr 0C04Ch arg_C04C = dword ptr 0C050h arg_C050 = dword ptr 0C054h arg_C054 = dword ptr 0C058h arg_C058 = dword ptr 0C05Ch arg_C05C = dword ptr 0C060h arg_C060 = dword ptr 0C064h arg_C064 = dword ptr 0C068h arg_C068 = dword ptr 0C06Ch arg_C06C = dword ptr 0C070h arg_18068 = dword ptr 1806Ch arg_1806C = dword ptr 18070h arg_18070 = dword ptr 18074h mov eax, 0C02Ch call sub_402CD0 mov eax, [esp+arg_C02C] push ebx push ebp mov ebp, [esp+8+arg_C030] push esi mov esi, [esp+0Ch+arg_C034] push edi push ebp xor bl, bl xor edi, edi push eax mov [esp+1Bh], bl mov [esp+18h+arg_18], 9 mov [esp+18h+arg_14], 100h ; mov dword_404720, edi mov dword ptr [esi], 21575A4Ch mov [esi+4], ebp call sub_402850 mov ecx, 100h mov [esi+8], eax add esp, 8 mov [esp+10h+arg_8], 0Ch mov [esp+10h+arg_10], edi mov [esp+10h+arg_0], ecx lea eax, [esp+10h+arg_30] loc_402900: mov [eax-8], edi mov [eax], edi mov dword ptr [eax-4], 1 add eax, 0Ch sub ecx, 1 jnz short loc_402900 xor ecx, ecx cmp ebp, edi mov [esp+10h+arg_4], ecx ja short loc_40293B loc_40291E: mov eax, [esp+10h+arg_8] pop edi pop esi pop ebp pop ebx add esp, 0C02Ch ret 0Ch align 4 loc_402930: mov ebp, [esp-0C02Ch+arg_1806C] mov ecx, [esp-0C02Ch+arg_C040] loc_40293B: mov edx, [esp-0C02Ch+arg_18068] movzx edi, byte ptr [edx+ecx] add edx, ecx lea eax, [edi+edi*2] mov eax, [esp+eax*4-0C02Ch+arg_C06C] test eax, eax mov [esp-0C02Ch+arg_C05C], edx mov [esp-0C02Ch+arg_C060], edi mov [esp-0C02Ch+arg_C048], edi jz loc_402A17 mov esi, 1 add ecx, esi cmp ecx, ebp mov [esp-0C02Ch+arg_C058], eax jnb loc_402A17 jmp short loc_402988 ;---------------------------------------------- jmp short loc_402980 ;----------------------------------------------- align 8 loc_402980: mov eax, [esp-0C02Ch+arg_C058] mov edx, [esp-0C02Ch+arg_C05C] loc_402988: test eax, eax jz loc_402A17 lea edi, [eax+eax*2] add edi, edi add edi, edi mov ebp, [esp+edi-0C02Ch+arg_C068] cmp ebp, esi jbe short loc_4029F7 mov ecx, [esp-0C02Ch+arg_C040] lea eax, [ecx+ebp] cmp eax, [esp-0C02Ch+arg_1806C] ja short loc_4029F7 mov ecx, [esp+edi-0C02Ch+arg_C064] mov dl, [edx+esi] mov ebx, [esp-0C02Ch+arg_18068] lea eax, [ecx+esi] cmp dl, [eax+ebx] jnz short loc_4029F3 xor eax, eax mov dl, 1 add ecx, ebx jmp short loc_4029D0 align 4 loc_4029D0: cmp eax, ebp mov bl, [esp-0C02Ch+arg_C03B] jnb loc_402B16 mov ebx, [esp-0C02Ch+arg_C05C] mov bl, [ebx+eax] cmp bl, [ecx] jz short loc_4029E9 xor dl, dl loc_4029E9: add eax, 1 add ecx, 1 test dl, dl jnz short loc_4029D0 loc_4029F3: mov bl, [esp-0C02Ch+arg_C03B] loc_4029F7: mov edx, [esp-0C02Ch+arg_C040] mov ecx, [esp+edi-0C02Ch+arg_C06C] mov edi, [esp-0C02Ch+arg_C048] lea eax, [esi+edx] cmp eax, [esp-0C02Ch+arg_1806C] mov [esp-0C02Ch+arg_C058], ecx jb loc_402980 loc_402A17: mov eax, [esp-0C02Ch+arg_C04C] cmp eax, 0F00h jnz loc_402B2D mov edx, [esp-0C02Ch+arg_C03C] mov esi, [esp-0C02Ch+arg_18068] lea eax, [edx+edx*2] add eax, eax add eax, eax mov ecx, [esp+eax-0C02Ch+arg_C064] movzx ecx, byte ptr [ecx+esi] mov eax, [esp+eax-0C02Ch+arg_C06C] add edx, 1 lea ecx, [ecx+ecx*2] mov [esp+ecx*4-0C02Ch+arg_C06C], eax mov eax, edx mov [esp-0C02Ch+arg_C03C], edx cdq and edx, 0FFFh add eax, edx sar eax, 0Ch jz short loc_402A6A mov [esp-0C02Ch+arg_C03C], 100h loc_402A6A: mov ecx, [esp-0C02Ch+arg_C03C] add ecx, 0FFFFFFFFh cmp ecx, 0FFh jnz short loc_402A7E mov ecx, 0FFFh loc_402A7E: mov eax, [esp-0C02Ch+arg_C060] lea edx, [eax+eax*2] cmp [esp+edx*4-0C02Ch+arg_C06C], 0 lea edx, [esp+edx*4-0C02Ch+arg_C06C] jz short loc_402AA0 loc_402A90: mov eax, [edx] lea edx, [eax+eax*2] cmp [esp+edx*4-0C02Ch+arg_C06C], 0 lea edx, [esp+edx*4-0C02Ch+arg_C06C] jnz short loc_402A90 loc_402AA0: mov ebp, [esp-0C02Ch+arg_C040] lea edx, [eax+eax*2] mov [esp+edx*4-0C02Ch+arg_C06C], ecx lea eax, [ecx+ecx*2] add eax, eax add eax, eax lea edx, [edi+edi*2] mov [esp+eax-0C02Ch+arg_C064], ebp mov edx, [esp+edx*4-0C02Ch+arg_C068] add edx, 1 cmp [esp-0C02Ch+arg_C04C], 0F00h lea ecx, [esp+eax-0C02Ch+arg_C068] mov [ecx], edx mov [esp+eax-0C02Ch+arg_C06C], 0 jge short loc_402ADD add [esp-0C02Ch+arg_C04C], 1 loc_402ADD: mov ecx, [esp-0C02Ch+arg_C054] mov eax, edx mov edx, 1 shl edx, cl lea ebp, [eax+ebp-1] mov [esp-0C02Ch+arg_C040], ebp ; mov dword_404720, ebp cmp edx, [esp-0C02Ch+arg_C050] jnz short loc_402B0A cmp ecx, 0Ch jge short loc_402B0A add ecx, 1 mov [esp-0C02Ch+arg_C054], ecx loc_402B0A: xor esi, esi test ecx, ecx jle loc_402BB2 jmp short loc_402B44 loc_402B16: test dl, dl jz loc_4029F7 mov eax, [esp-0C02Ch+arg_C058] mov esi, ebp mov [esp-0C02Ch+arg_C048], eax jmp loc_4029F7 loc_402B2D: jge loc_402A6A mov ecx, [esp-0C02Ch+arg_C03C] add ecx, eax jmp loc_402A7E align 4 loc_402B40: mov edi, [esp-0C02Ch+arg_C048] loc_402B44: mov eax, [esp-0C02Ch+arg_C044] mov ecx, [esp-0C02Ch+arg_18070] mov dl, [eax+ecx] mov ecx, esi mov eax, 1 shl eax, cl mov ecx, 7 test edi, eax movzx eax, bl mov bl, 1 jz short loc_402B71 sub ecx, eax shl bl, cl or dl, bl jmp short loc_402B79 loc_402B71: sub ecx, eax shl bl, cl not bl and dl, bl loc_402B79: mov ecx, [esp-0C02Ch+arg_C044] mov edi, [esp-0C02Ch+arg_18070] lea ebx, [eax+1] and ebx, 80000007h mov [ecx+edi], dl jns short loc_402B97 dec ebx or ebx, 0FFFFFFF8h inc ebx loc_402B97: test bl, bl jnz short loc_402BA5 add ecx, 1 mov [esp-0C02Ch+arg_C044], ecx mov [ecx+edi], bl loc_402BA5: add esi, 1 cmp esi, [esp-0C02Ch+arg_C054] jl short loc_402B40 mov [esp-0C02Ch+arg_C03B], bl loc_402BB2: add [esp-0C02Ch+arg_C050], 1 cmp ebp, [esp-0C02Ch+arg_1806C] jb loc_402930 test bl, bl jz loc_40291E mov eax, [esp-0C02Ch+arg_C044] pop edi pop esi pop ebp add eax, 1 pop ebx add esp, 0C02Ch ret 0Ch lzwCompress@12 endp ; sp = 18068h sub_402CD0 proc ; CODE XREF: sub_402890+5p arg_0 = byte ptr 8 push ecx cmp eax, 1000h lea ecx, [esp+arg_0] jb short loc_402CF0 loc_402CDC: sub ecx, 1000h sub eax, 1000h test [ecx], eax cmp eax, 1000h jnb short loc_402CDC loc_402CF0: sub ecx, eax mov eax, esp test [ecx], eax mov esp, ecx mov ecx, [eax] mov eax, [eax+4] push eax ret sub_402CD0 endp sub_402850 proc arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp cmp [ebp+arg_4], 0 jnz short loc_40285D xor eax, eax pop ebp ret loc_40285D: push esi push edi mov esi, [ebp+arg_0] mov edi, [ebp+arg_4] cld xor edx, edx dec edx loc_402869: xor eax, eax lodsb xor al, dl xor ecx, ecx mov cl, 8 shr edx, cl loc_402874: clc rcr eax, 1 jnb short loc_40287E xor eax, 0EDB88320h loc_40287E: loop loc_402874 xor edx, eax dec edi jnz short loc_402869 mov eax, edx not eax pop edi pop esi pop ebp ret sub_402850 endp lzwDecompress@12 proc var_10 = byte ptr -10h arg_0 = dword ptr 4 arg_4 = dword ptr 8 arg_8 = dword ptr 0Ch arg_C = dword ptr 10h arg_10 = dword ptr 14h arg_14 = dword ptr 18h arg_18 = dword ptr 1Ch arg_28 = byte ptr 2Ch arg_C024 = dword ptr 0C028h arg_C028 = dword ptr 0C02Ch arg_C02C = dword ptr 0C030h arg_C033 = byte ptr 0C037h arg_C034 = dword ptr 0C038h arg_C038 = dword ptr 0C03Ch arg_C03C = dword ptr 0C040h arg_C040 = dword ptr 0C044h arg_C044 = dword ptr 0C048h arg_C048 = dword ptr 0C04Ch arg_C04C = dword ptr 0C050h arg_C050 = dword ptr 0C054h arg_C054 = dword ptr 0C058h arg_C058 = dword ptr 0C05Ch arg_C05C = dword ptr 0C060h arg_18058 = dword ptr 1805Ch arg_18060 = dword ptr 18064h mov eax, 0C024h call sub_402CD0 mov ecx, [esp+arg_C028] cmp ecx, 0Ch ja short loc_402C84 mov eax, 5 add esp, 0C024h ret 0Ch loc_402C84: mov eax, [esp+arg_C024] cmp dword ptr [eax], 21575A4Ch jz short loc_402CA1 mov eax, 1 add esp, 0C024h ret 0Ch loc_402CA1: push ebx push ebp push esi push edi push eax call lzwGetDecompressedSize@4 mov edx, 9 mov ebx, 100h mov [esp+10h+arg_8], eax lea eax, ds:0FFFFFFA0h[ecx*8] xor esi, esi cmp eax, edx mov edi, ebx mov [esp+10h+arg_C], 0Ch mov byte ptr [esp+13h], 0 mov [esp+10h+arg_10], edx mov [esp+10h+arg_14], ebx ; mov dword_405724, esi mov [esp+10h+arg_18], edi mov ecx, edx jl short loc_402D10 lea esp, [esp+0] loc_402CF0: mov ebp, 1 shl ebp, cl cmp edi, ebp jnz short loc_402D03 cmp ecx, 0Ch jz short loc_402D03 add ecx, 1 loc_402D03: sub eax, ecx add edi, 1 cmp eax, ecx jge short loc_402CF0 mov [esp+10h+arg_18], edi loc_402D10: mov [esp+10h+arg_4], esi mov [esp+10h+arg_0], ebx lea eax, [esp+10h+arg_28] mov ecx, ebx mov edi, edi loc_402D20: mov [eax-8], esi mov [eax], esi mov dword ptr [eax-4], 1 add eax, 0Ch sub ecx, 1 jnz short loc_402D20 xor ebp, ebp cmp [esp+10h+arg_8], esi ja short loc_402D77 loc_402D3C: mov ecx, [esp+10h+arg_8] mov edx, [esp+10h+arg_C02C] push ecx push edx call sub_402850 mov edx, [esp+18h+arg_C024] add esp, 8 mov ecx, eax mov eax, [edx+8] sub eax, ecx pop edi neg eax pop esi sbb eax, eax pop ebp and eax, 2 pop ebx add esp, 0C024h ret 0Ch loc_402D73: mov edi, [esp-0C024h+arg_C04C] loc_402D77: cmp ebx, edi jnb loc_402F53 xor ebx, ebx xor edi, edi test edx, edx jle loc_402E14 jmp short loc_402D90 align 4 loc_402D90: movzx esi, [esp-0C024h+arg_C033] mov eax, [esp-0C024h+arg_C040] lea eax, [esi+eax*8] mov edx, eax and edx, 80000007h jns short loc_402DAB dec edx or edx, 0FFFFFFF8h inc edx loc_402DAB: mov ecx, 7 sub ecx, edx mov edx, 1 shl edx, cl mov ecx, [esp-0C024h+arg_18058] mov [esp-0C024h+arg_C050], edx cdq and edx, 7 add eax, edx sar eax, 3 mov dl, [eax+ecx] mov eax, [esp-0C024h+arg_C050] test dl, al jz short loc_402DE3 mov eax, 1 mov ecx, edi shl eax, cl or ebx, eax loc_402DE3: lea eax, [esi+1] and eax, 80000007h jns short loc_402DF2 dec eax or eax, 0FFFFFFF8h inc eax loc_402DF2: test al, al mov [esp-0C024h+arg_C033], al jnz short loc_402DFF add [esp-0C024h+arg_C040], 1 loc_402DFF: add edi, 1 cmp edi, [esp-0C024h+arg_C044] jl short loc_402D90 cmp ebx, 0FFh ja short loc_402E20 mov esi, [esp-0C024h+arg_C038] loc_402E14: mov ecx, [esp-0C024h+arg_18060] mov [ecx+ebp], bl jmp short loc_402E7B loc_402E20: mov eax, [esp-0C024h+arg_C038] cmp eax, 0F00h jge short loc_402E38 add eax, 0FFh cmp ebx, eax ja loc_402F41 loc_402E38: lea eax, [ebx+ebx*2] add eax, eax add eax, eax mov edx, [esp+eax-0C024h+arg_C058] lea ecx, [edx+ebp] cmp ecx, [esp-0C024h+arg_C03C] ja loc_402F41 xor ecx, ecx test edx, edx jbe short loc_402E77 mov eax, [esp+eax-0C024h+arg_C054] mov esi, edx mov edx, [esp-0C024h+arg_18060] add eax, edx lea edi, [edx+ebp] loc_402E68: mov dl, [eax] mov [edi+ecx], dl add ecx, 1 add eax, 1 cmp ecx, esi jb short loc_402E68 loc_402E77: mov esi, [esp-0C024h+arg_C038] loc_402E7B: cmp esi, 0F00h jnz loc_402F30 mov eax, [esp-0C024h+arg_C034] add eax, 1 mov [esp-0C024h+arg_C034], eax cdq and edx, 0FFFh add eax, edx sar eax, 0Ch jz short loc_402EA8 mov [esp-0C024h+arg_C034], 100h loc_402EA8: mov eax, [esp-0C024h+arg_C034] add eax, 0FFFFFFFFh cmp eax, 0FFh jnz short loc_402EBB mov eax, 0FFFh loc_402EBB: lea eax, [eax+eax*2] add eax, eax add eax, eax lea edx, [ebx+ebx*2] mov [esp+eax-0C024h+arg_C054], ebp mov edx, [esp+edx*4-0C024h+arg_C058] add edx, 1 cmp esi, 0F00h lea ecx, [esp+eax-0C024h+arg_C058] mov [ecx], edx mov [esp+eax-0C024h+arg_C05C], 0 jge short loc_402EED add esi, 1 mov [esp-0C024h+arg_C038], esi loc_402EED: mov ebx, [esp-0C024h+arg_C048] mov eax, edx mov edx, [esp-0C024h+arg_C044] lea ebp, [eax+ebp-1] mov eax, 1 mov ecx, edx shl eax, cl add ebx, 1 ; mov dword_405724, ebp mov [esp-0C024h+arg_C048], ebx cmp eax, ebx jnz short loc_402F21 cmp edx, 0Ch jge short loc_402F21 add edx, 1 mov [esp-0C024h+arg_C044], edx loc_402F21: cmp ebp, [esp-0C024h+arg_C03C] jb loc_402D73 jmp loc_402D3C loc_402F30: jge loc_402EA8 mov eax, [esp-0C024h+arg_C034] add eax, esi jmp loc_402EBB loc_402F41: pop edi pop esi pop ebp mov eax, 3 pop ebx add esp, 0C024h ret 0Ch loc_402F53: cmp ebp, [esp-0C024h+arg_C03C] jnb loc_402D3C pop edi pop esi pop ebp mov eax, 4 pop ebx add esp, 0C024h ret 0Ch lzwDecompress@12 endp
Вот ИМХО лудший сайт по сжатию информации: http://www.compression.ru/download/ В разделе есть исходники на ASM в том числе.