Что делает этот код?

Тема в разделе "WASM.A&O", создана пользователем dr_dred, 10 июн 2007.

  1. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Текст из дизасм. листнинга, переделал под C. ubuf содержит неизвестно что.
    Кто-нибудь встречался с этим или просто знает что это?

    Код (Text):
    1. char        ubuf[168];
    2. unsigned    buf[] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
    3. unsigned    sum = 0;
    4. for (unsigned i = 0; i < 168; i++)
    5.     sum = buf[ubuf[i]&15]
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    какой-то простенький хеш.(громко сказано!)

    покажи оригинал на асме, может ты неверно перевёл
     
  3. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Код (Text):
    1. .text:71F22914 ; Attributes: bp-based frame
    2. .text:71F22914
    3. .text:71F22914 ; __stdcall CalculateDuration(x)
    4. .text:71F22914 _CalculateDuration@4 proc near          ; CODE XREF: ToplScheduleImport(x,x)+28p
    5. .text:71F22914                                         ; ToplPScheduleValid(x)+1Bp
    6. .text:71F22914
    7. .text:71F22914 var_40          = dword ptr -40h
    8. .text:71F22914 var_3C          = dword ptr -3Ch
    9. .text:71F22914 var_38          = dword ptr -38h
    10. .text:71F22914 var_34          = dword ptr -34h
    11. .text:71F22914 var_30          = dword ptr -30h
    12. .text:71F22914 var_2C          = dword ptr -2Ch
    13. .text:71F22914 var_28          = dword ptr -28h
    14. .text:71F22914 var_24          = dword ptr -24h
    15. .text:71F22914 var_20          = dword ptr -20h
    16. .text:71F22914 var_1C          = dword ptr -1Ch
    17. .text:71F22914 var_18          = dword ptr -18h
    18. .text:71F22914 var_14          = dword ptr -14h
    19. .text:71F22914 var_10          = dword ptr -10h
    20. .text:71F22914 var_C           = dword ptr -0Ch
    21. .text:71F22914 var_8           = dword ptr -8
    22. .text:71F22914 var_4           = dword ptr -4
    23. .text:71F22914 PSchedule       = dword ptr  8
    24. .text:71F22914
    25. .text:71F22914                 push    ebp
    26. .text:71F22915                 mov     ebp, esp
    27. .text:71F22917                 sub     esp, 40h
    28. .text:71F2291A                 push    esi
    29. .text:71F2291B                 push    2
    30. .text:71F2291D                 pop     eax
    31. .text:71F2291E                 push    3
    32. .text:71F22920                 pop     ecx
    33. .text:71F22921                 mov     [ebp+var_34], eax
    34. .text:71F22924                 mov     [ebp+var_2C], eax
    35. .text:71F22927                 mov     [ebp+var_28], eax
    36. .text:71F2292A                 mov     [ebp+var_1C], eax
    37. .text:71F2292D                 mov     [ebp+var_18], eax
    38. .text:71F22930                 mov     [ebp+var_10], eax
    39. .text:71F22933                 mov     eax, [ebp+PSchedule]
    40. .text:71F22936                 xor     edx, edx
    41. .text:71F22938                 inc     edx
    42. .text:71F22939                 mov     [ebp+var_24], ecx
    43. .text:71F2293C                 mov     [ebp+var_14], ecx
    44. .text:71F2293F                 mov     [ebp+var_C], ecx
    45. .text:71F22942                 mov     [ebp+var_8], ecx
    46. .text:71F22945                 mov     ecx, [eax+10h]
    47. .text:71F22948                 xor     esi, esi
    48. .text:71F2294A                 add     ecx, eax
    49. .text:71F2294C                 mov     [ebp+var_40], esi
    50. .text:71F2294F                 mov     [ebp+var_3C], edx
    51. .text:71F22952                 mov     [ebp+var_38], edx
    52. .text:71F22955                 mov     [ebp+var_30], edx
    53. .text:71F22958                 mov     [ebp+var_20], edx
    54. .text:71F2295B                 mov     [ebp+var_4], 4
    55. .text:71F22962                 xor     eax, eax
    56. .text:71F22964
    57. .text:71F22964 loc_71F22964:                           ; CODE XREF: CalculateDuration(x)+63j
    58. .text:71F22964                 xor     edx, edx
    59. .text:71F22966                 mov     dl, [esi+ecx]
    60. .text:71F22969                 and     edx, 0Fh
    61. .text:71F2296C                 add     eax, [ebp+edx*4+var_40]
    62. .text:71F22970                 inc     esi
    63. .text:71F22971                 cmp     esi, 168
    64. .text:71F22977                 jb      short loc_71F22964
    65. .text:71F22979                 imul    eax, 15
    66. .text:71F2297C                 pop     esi
    67. .text:71F2297D                 leave
    68. .text:71F2297E                 retn    4
    69. .text:71F2297E _CalculateDuration@4 endp
     
  4. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    В помощь:

    Код (Text):
    1. .text:71F22981 _CheckPSchedule@4 proc near             ; CODE XREF: CheckSchedule(x)+23p
    2. .text:71F22981                                         ; CheckScheduleCache(x)+31p ...
    3. .text:71F22981
    4. .text:71F22981 PSchedule       = dword ptr  8
    5. .text:71F22981
    6. .text:71F22981                 push    esi
    7. .text:71F22982                 mov     esi, [esp+PSchedule]
    8. .text:71F22986                 test    esi, esi
    9. .text:71F22988                 push    edi
    10. .text:71F22989                 mov     edi, 0E0000066h
    11. .text:71F2298E                 jnz     short loc_71F22996
    12. .text:71F22990                 push    edi             ; dwExceptionCode
    13. .text:71F22991                 call    _ToplRaiseException@4 ; ToplRaiseException(x)
    14. .text:71F22996
    15. .text:71F22996 loc_71F22996:                           ; CODE XREF: CheckPSchedule(x)+Dj
    16. .text:71F22996                 cmp     dword ptr [esi], 0BCh
    17. .text:71F2299C                 jnz     short loc_71F229B0
    18. .text:71F2299E                 cmp     dword ptr [esi+8], 1
    19. .text:71F229A2                 jnz     short loc_71F229B0
    20. .text:71F229A4                 cmp     dword ptr [esi+0Ch], 0
    21. .text:71F229A8                 jnz     short loc_71F229B0
    22. .text:71F229AA                 cmp     dword ptr [esi+10h], 20
    23. .text:71F229AE                 jz      short loc_71F229B6
    24. .text:71F229B0
    25. .text:71F229B0 loc_71F229B0:                           ; CODE XREF: CheckPSchedule(x)+1Bj
    26. .text:71F229B0                                         ; CheckPSchedule(x)+21j ...
    27. .text:71F229B0                 push    edi             ; dwExceptionCode
    28. .text:71F229B1                 call    _ToplRaiseException@4 ; ToplRaiseException(x)
    29. .text:71F229B6
    30. .text:71F229B6 loc_71F229B6:                           ; CODE XREF: CheckPSchedule(x)+2Dj
    31. .text:71F229B6                 pop     edi
    32. .text:71F229B7                 pop     esi
    33. .text:71F229B8                 retn    4
    34. .text:71F229B8 _CheckPSchedule@4 endp
     
  5. B_108

    B_108 New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    62
    Только там
    Код (Text):
    1. sum += buf[ubuf[i]&15]
     
  6. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    buf[] содержит количество единиц в двоичной записи чисел от 0 до 15, алгоритм подсчитывает единичные биты в младших полубайтах ubuf[] - по-моему, все совершенно ясно :)
     
  7. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    ava
    Гы, а ведь верно, спасибо.