crc32

Тема в разделе "WASM.ASSEMBLER", создана пользователем asm0day01, 28 авг 2021.

  1. asm0day01

    asm0day01 Member

    Публикаций:
    0
    Регистрация:
    7 янв 2020
    Сообщения:
    128
    алгоритм на ассемблере pliz (есть у кого?)
     
  2. Prober

    Prober Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    32
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.328
    Код (ASM):
    1.  
    2.     xor   eax, eax
    3. l:
    4.     crc32 eax, [esi]
    5.     inc   esi
    6.     loop l
    7.  
     
    Artem_N, Indy_, ml64 и ещё 1-му нравится это.
  4. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.729
    Код (ASM):
    1. .686
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. .data
    6. align 4
    7. CRC32Table label dword
    8. dd 000000000h,077073096h,0EE0E612Ch,0990951BAh,0076DC419h,0706AF48Fh,0E963A535h,09E6495A3h
    9. dd 00EDB8832h,079DCB8A4h,0E0D5E91Eh,097D2D988h,009B64C2Bh,07EB17CBDh,0E7B82D07h,090BF1D91h
    10. dd 01DB71064h,06AB020F2h,0F3B97148h,084BE41DEh,01ADAD47Dh,06DDDE4EBh,0F4D4B551h,083D385C7h
    11. dd 0136C9856h,0646BA8C0h,0FD62F97Ah,08A65C9ECh,014015C4Fh,063066CD9h,0FA0F3D63h,08D080DF5h
    12. dd 03B6E20C8h,04C69105Eh,0D56041E4h,0A2677172h,03C03E4D1h,04B04D447h,0D20D85FDh,0A50AB56Bh
    13. dd 035B5A8FAh,042B2986Ch,0DBBBC9D6h,0ACBCF940h,032D86CE3h,045DF5C75h,0DCD60DCFh,0ABD13D59h
    14. dd 026D930ACh,051DE003Ah,0C8D75180h,0BFD06116h,021B4F4B5h,056B3C423h,0CFBA9599h,0B8BDA50Fh
    15. dd 02802B89Eh,05F058808h,0C60CD9B2h,0B10BE924h,02F6F7C87h,058684C11h,0C1611DABh,0B6662D3Dh
    16. dd 076DC4190h,001DB7106h,098D220BCh,0EFD5102Ah,071B18589h,006B6B51Fh,09FBFE4A5h,0E8B8D433h
    17. dd 07807C9A2h,00F00F934h,09609A88Eh,0E10E9818h,07F6A0DBBh,0086D3D2Dh,091646C97h,0E6635C01h
    18. dd 06B6B51F4h,01C6C6162h,0856530D8h,0F262004Eh,06C0695EDh,01B01A57Bh,08208F4C1h,0F50FC457h
    19. dd 065B0D9C6h,012B7E950h,08BBEB8EAh,0FCB9887Ch,062DD1DDFh,015DA2D49h,08CD37CF3h,0FBD44C65h
    20. dd 04DB26158h,03AB551CEh,0A3BC0074h,0D4BB30E2h,04ADFA541h,03DD895D7h,0A4D1C46Dh,0D3D6F4FBh
    21. dd 04369E96Ah,0346ED9FCh,0AD678846h,0DA60B8D0h,044042D73h,033031DE5h,0AA0A4C5Fh,0DD0D7CC9h
    22. dd 05005713Ch,0270241AAh,0BE0B1010h,0C90C2086h,05768B525h,0206F85B3h,0B966D409h,0CE61E49Fh
    23. dd 05EDEF90Eh,029D9C998h,0B0D09822h,0C7D7A8B4h,059B33D17h,02EB40D81h,0B7BD5C3Bh,0C0BA6CADh
    24. dd 0EDB88320h,09ABFB3B6h,003B6E20Ch,074B1D29Ah,0EAD54739h,09DD277AFh,004DB2615h,073DC1683h
    25. dd 0E3630B12h,094643B84h,00D6D6A3Eh,07A6A5AA8h,0E40ECF0Bh,09309FF9Dh,00A00AE27h,07D079EB1h
    26. dd 0F00F9344h,08708A3D2h,01E01F268h,06906C2FEh,0F762575Dh,0806567CBh,0196C3671h,06E6B06E7h
    27. dd 0FED41B76h,089D32BE0h,010DA7A5Ah,067DD4ACCh,0F9B9DF6Fh,08EBEEFF9h,017B7BE43h,060B08ED5h
    28. dd 0D6D6A3E8h,0A1D1937Eh,038D8C2C4h,04FDFF252h,0D1BB67F1h,0A6BC5767h,03FB506DDh,048B2364Bh
    29. dd 0D80D2BDAh,0AF0A1B4Ch,036034AF6h,041047A60h,0DF60EFC3h,0A867DF55h,0316E8EEFh,04669BE79h
    30. dd 0CB61B38Ch,0BC66831Ah,0256FD2A0h,05268E236h,0CC0C7795h,0BB0B4703h,0220216B9h,05505262Fh
    31. dd 0C5BA3BBEh,0B2BD0B28h,02BB45A92h,05CB36A04h,0C2D7FFA7h,0B5D0CF31h,02CD99E8Bh,05BDEAE1Dh
    32. dd 09B64C2B0h,0EC63F226h,0756AA39Ch,0026D930Ah,09C0906A9h,0EB0E363Fh,072076785h,005005713h
    33. dd 095BF4A82h,0E2B87A14h,07BB12BAEh,00CB61B38h,092D28E9Bh,0E5D5BE0Dh,07CDCEFB7h,00BDBDF21h
    34. dd 086D3D2D4h,0F1D4E242h,068DDB3F8h,01FDA836Eh,081BE16CDh,0F6B9265Bh,06FB077E1h,018B74777h
    35. dd 088085AE6h,0FF0F6A70h,066063BCAh,011010B5Ch,08F659EFFh,0F862AE69h,0616BFFD3h,0166CCF45h
    36. dd 0A00AE278h,0D70DD2EEh,04E048354h,03903B3C2h,0A7672661h,0D06016F7h,04969474Dh,03E6E77DBh
    37. dd 0AED16A4Ah,0D9D65ADCh,040DF0B66h,037D83BF0h,0A9BCAE53h,0DEBB9EC5h,047B2CF7Fh,030B5FFE9h
    38. dd 0BDBDF21Ch,0CABAC28Ah,053B39330h,024B4A3A6h,0BAD03605h,0CDD70693h,054DE5729h,023D967BFh
    39. dd 0B3667A2Eh,0C4614AB8h,05D681B02h,02A6F2B94h,0B40BBE37h,0C30C8EA1h,05A05DF1Bh,02D02EF8Dh
    40.  
    41.  
    42. .code
    43.  
    44. align 4
    45. CRC32 proc uses esi lpBuffer:DWORD,dwBufLen:DWORD,dwCRC:DWORD
    46.     mov eax,dwCRC
    47.     mov ecx,dwBufLen
    48.     xor eax,-1
    49.     test ecx,ecx
    50.     mov esi,lpBuffer
    51.     jz @F
    52.     .repeat
    53.         xor al,[esi]
    54.         movzx edx,al
    55.         shr eax,8
    56.         mov edx,[CRC32Table+edx*4]
    57.         inc esi
    58.         xor eax,edx
    59.         dec ecx
    60.     .until zero?
    61. @@:    xor eax,-1
    62.     ret
    63. CRC32 endp
    64.  
    65. align 4
    66. RCRC32 proc uses ebx esi edi pData:dword,dwDataLen:dword,dwOffset:dword,dwWantCrc:dword
    67.     mov esi,pData
    68.     invoke CRC32,esi,dwOffset,0
    69.     mov edx,dwDataLen
    70.     mov edi,esi
    71.     test edx,edx
    72.     mov ecx,dwWantCrc
    73.     jz @@Exit
    74.     add esi,edx
    75.     add edi,dwOffset
    76.     mov [edi],eax
    77.     xor ecx,-1
    78.     xor eax,eax
    79.     push ecx
    80.     mov edx,4
    81.     push eax
    82.     ; rcrc32(@wantcrc,4)
    83.     .repeat
    84.         mov al,[esp+edx+3]
    85.         call @@GetTableEntry
    86.         xor [esp+edx],eax
    87.         xor [esp+edx-1],cl
    88.         dec edx
    89.     .until zero?
    90.     add edi,4
    91.     jmp @F
    92.     ; rcrc32(pData+dwOffset+4,dwDataLen-dwOffset))
    93.     .repeat
    94.         mov eax,[esp]
    95.         sub esi,4
    96.         xor ecx,ecx
    97.         xor eax,[esi]
    98.         mov [esp],ecx
    99.         mov [esp+4],eax
    100.         mov edx,4
    101.         .repeat
    102.             mov al,[esp+edx+3]
    103.             call @@GetTableEntry
    104.             xor [esp+edx],eax
    105.             xor [esp+edx-1],cl
    106.             dec edx
    107.         .until zero?
    108. @@:
    109.     .until esi <= edi
    110.     pop eax
    111.     xor eax,-1
    112.     xor [edi-4],eax; dwRCRC xor crc32(pData,dwOffset,0)
    113.     add esp,4
    114. @@Exit:
    115.     ret
    116. @@GetTableEntry:
    117.     xor ecx,ecx
    118.     .repeat
    119.         .break .if al == byte ptr [CRC32Table+ecx*4+3]
    120.         inc cl
    121.     .until zero?
    122.     mov eax,[CRC32Table+ecx*4]
    123.     retn
    124. RCRC32 endp
    125.  
    126. end
     
    Последнее редактирование модератором: 29 авг 2021
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    w2k ?
    --- Сообщение объединено, 31 авг 2021 ---
    IA, 3-232

    > CRC32 — Accumulate CRC32 Value

    > F2 0F 38 F0 /r
    > CRC32 r32, r/m8

    > Starting with an initial value in the first operand (destination operand), accumulates a CRC32 (polynomial
    11EDC6F41H) value for the second operand (source operand) and stores the result in the destination operand. The
    source operand can be a register or a memory location. The destination operand must be an r32 or r64 register.
     

    Вложения:

    • crc.zip
      Размер файла:
      5,7 КБ
      Просмотров:
      192
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    rmn, отличается ли инструкция crc32 (ее вывод) от апи RtlComputeCrc32 ? У меня на 1 строку дает разные результаты, думаю или ошибка или все же другой алгос.
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Порождающий полином у циклических корректирующих кодов не данное богом откровение, а поле, рассчитываемое в зависимости от того, сколько ошибок в поле какого размера этот код должен исправлять. RtlComputeCrc32 это более распространенный алгоритм: инвертирует IV и считает с полиномом 0xEDB88320. Порождающий полином у интеловской crc32 вон у клерка выше приведен.
     
    M0rg0t нравится это.