Доброго времени суток! Вопрос собственно в следующем: по статье http://www.wasm.ru/article.php?article=vgw10 сделал подсчет crc32, но это число (crc32) почему то не совпадает с числом, которое выдает другая готовая прога для подсчета crc например вот эта http://www34.brinkster.com/dizzyk/crc32.asp Я не силен в делфях, поэтому не разобрал код подсчета crc в это проге... или может есть разные методы???
хм почему в кернеле? =))) в проге по ссылке следуюший алгоритм подсчета Код (Text): CODE:00404FB4 sub_404FB4 proc near ; CODE XREF: sub_404FEC+DCp CODE:00404FB4 push ebx CODE:00404FB5 push esi CODE:00404FB6 test ecx, ecx CODE:00404FB8 jz short loc_404FE9 CODE:00404FBA mov ebx, edx CODE:00404FBC not dword ptr [eax] CODE:00404FBE mov edx, ecx CODE:00404FC0 dec edx CODE:00404FC1 test edx, edx CODE:00404FC3 jl short loc_404FE7 CODE:00404FC5 inc edx CODE:00404FC6 CODE:00404FC6 loc_404FC6: ; CODE XREF: sub_404FB4+31j CODE:00404FC6 mov ecx, [eax] CODE:00404FC8 movzx esi, byte ptr [ebx] CODE:00404FCB xor ecx, esi CODE:00404FCD and ecx, 0FFh CODE:00404FD3 mov ecx, ds:dword_40A0C4[ecx*4] CODE:00404FDA mov esi, [eax] CODE:00404FDC shr esi, 8 CODE:00404FDF xor ecx, esi CODE:00404FE1 mov [eax], ecx CODE:00404FE3 inc ebx CODE:00404FE4 dec edx CODE:00404FE5 jnz short loc_404FC6 CODE:00404FE7 CODE:00404FE7 loc_404FE7: ; CODE XREF: sub_404FB4+Fj CODE:00404FE7 not dword ptr [eax] CODE:00404FE9 CODE:00404FE9 loc_404FE9: ; CODE XREF: sub_404FB4+4j CODE:00404FE9 pop esi CODE:00404FEA pop ebx CODE:00404FEB retn CODE:00404FEB sub_404FB4 endp Т.е. что-то вроде Код (Text): unsigned int crc(unsigned char *buf, int cnt) { long crc_table[256]; unsigned long t; unsigned long crc32; for(int i=0;i<256;i++) { t=i; for(int j=8;j>0;j--) { if(t&1) t=(t>>1)^0xedb88320;// примитивный полином else t>>=1; }; crc_table[i] = t; }; crc32=0xffffffff; for(int i=0;i<cnt;i++) { crc32=crc_table[(crc32^(*buf++))&0xff]^(crc32>>8);}; crc32=crc32^0xffffffff; return crc32; }; только таблица подсчитана еще до компиляции возможно при расчете таблицы был использован другой полином. Покури это - http://wasm.ru/docs/5/crc.zip
сколько можно одно и тоже талдычить, инфы море, первая считает по строке ASCIIZ, вторая память с опрделённой длиной Код (Text): GetCRC32Z proc uses ebx edx, lpData:DWORD xor eax,eax mov edx,lpData not eax @1: xor al,[edx] inc edx mov bl,8 @2: shr eax,1 jnc @3 xor eax,0EDB88320h ;0EDB88320h @3: dec bl jnz @2 cmp byte ptr [edx],0 jnz @1 not eax ret GetCRC32Z endp GetCRC32L proc uses ebx edx ecx, lpData:DWORD, dwLength ;get CRC32 with length mov ecx, dwLength add ecx, lpData xor eax,eax mov edx,lpData not eax @1: xor eax,[edx] add edx, 4 mov bl,32 @2: shr eax,1 jnc @3 xor eax,0EDB88320h ;0EDB88320h @3: dec bl jnz @2 cmp edx, ecx jb @1 not eax ret GetCRC32L endp