z0mbie's CRC32

Тема в разделе "WASM.ENGLISH", создана пользователем dcskm4200, 21 июн 2007.

  1. dcskm4200

    dcskm4200 New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    173
    Адрес:
    China
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc                        
    6. include \masm32\include\user32.inc
    7. include \masm32\include\kernel32.inc
    8.  
    9. includelib \masm32\lib\user32.lib
    10. includelib \masm32\lib\kernel32.lib
    11.  
    12. S macro pdata:VARARG
    13.     LOCAL Buff
    14. .data
    15.     ifidni <pdata>,<>            
    16.         Buff db 0        
    17.     else            
    18.         Buff db pdata,0
    19.     endif
    20. .code
    21.     exitm <OFFSET Buff>
    22. endm
    23.  
    24. .data
    25.     TempBuf     DB 64 dup(0)
    26. .code
    27. z0mbie_Crc32 proc uses ebx ecx edx pData:dword,tSize:dword
    28. ; input:  EDX=data, ECX=size, EAX=crc
    29. ; output: EAX=crc, EDX+=ECX, ECX=BL=0
    30.     mov edx,pData
    31.     mov ecx,tSize
    32. xcrc32:
    33.     jecxz   @@4
    34.         not     eax
    35. @@1:                    
    36.     xor     al, [edx]
    37.         inc     edx
    38.         mov     bl, 8
    39. @@2:                    
    40.     shr     eax, 1
    41.         jnc     @@3
    42.         xor     eax, 0EDB88320h
    43. @@3:                    
    44.     dec     bl
    45.         jnz     @@2
    46.         loop    @@1
    47.         not     eax
    48. @@4:            
    49.     ret
    50. z0mbie_Crc32 endp
    51. start: 
    52.         invoke  RtlZeroMemory,addr TempBuf,64
    53.     invoke  lstrlen,S("i'm a foolisher")
    54.     mov ecx,eax
    55.     mov edx,S("i'm a foolisher")
    56.     invoke  z0mbie_Crc32,edx,ecx
    57.     invoke  wsprintf,addr TempBuf,S("%X"),EAX
    58.     invoke  MessageBox,NULL,addr TempBuf,S("TEST_111"),MB_OK
    59.     invoke  ExitProcess, 0 
    60. end start
    the crc32 value "ED481EB3" is used by other way.
    the z0mbie's CRC32 value is "B9C0DD2E".

    what' wrong i used the z0mbie's CRC32?
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    hmmm... are you sure about your result? i've used this algo and got ED481EB3. Try to look in debugger what's goes wrong
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    dcskm4200
    Something wrong, look at:

    z0mbie_Crc32 proc uses ebx ecx edx pData:dword,tSize:dword
    ; input: EDX=data, ECX=size, EAX=crc

    and reg eax used in proc body:
     
  4. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    input eax=crc=0xDB710641
    but this algo glitches on data - e.g. [A] 1 byte long (without brackets of course). Tested with winrar) and online crc32 calc.
     
  5. dcskm4200

    dcskm4200 New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    173
    Адрес:
    China
    thanks you who answered the question, especially thanks crypto.
    the z0mbie's crc32 arithmetic is powerful.