проблема с исходничком wsprintfA

Тема в разделе "WASM.BEGINNERS", создана пользователем Flasher, 31 июл 2006.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Открыл исходничок sprintf, убрал всё лишнее, оставил только кусочек, который отвечает за 8x%.
    Вот часть кода:
    Код (Text):
    1.        invoke MD5hash,offset Password,1,offset szMD5Result
    2.        mov edi,offset HashBuf2
    3.        add edi,7
    4.        mov eax,szMD5Result.dtA
    5.        mov ecx,16
    6.        mov ebx,8
    7.     @@:
    8.        cdq
    9.        div ecx
    10.        movzx edx,byte ptr [lpHexTab+edx]
    11.        mov byte ptr [edi],dl
    12.        dec edi
    13.        dec ebx
    14.        jnz @B
    Полный hash состоит из 4х частей.
    szMD5Result.dtA, szMD5Result.dtС, szMD5Result.dtD - нормально переводит, а вот на szMD5Result.dtВ - вылетает...
    Не подскажите из за чего это может быть?
    Спасибо.
     
  2. Coban

    Coban New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2006
    Сообщения:
    5
    Замени cdq на xor edx, edx.
     
  3. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    coban, не имеет особого значания
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Avoidik, почемуж, всё правильно, помогло :)
    Coban, спасибо!
    Вот не оптимизированный, зато рабочий вариант :)
    Код (Text):
    1. _sprintf proc OutBuf:dword,h_a:dword,h_b:dword,h_c:dword,h_d:dword
    2.        xor esi,esi
    3.     @1:
    4.        inc esi
    5.        mov edi,OutBuf
    6.         .if esi == 1
    7.            mov eax,h_a
    8.            add edi,7
    9.         .elseif esi == 2
    10.            mov eax,h_b
    11.            add edi,15
    12.         .elseif esi == 3
    13.            mov eax,h_c
    14.            add edi,23
    15.         .else
    16.            mov eax,h_d
    17.            add edi,31
    18.         .endif
    19.        mov ecx,16
    20.        mov ebx,8
    21.     @@:
    22.        xor edx,edx
    23.        div ecx
    24.        movzx edx,byte ptr [lpHexTab+edx]
    25.        mov byte ptr [edi],dl
    26.        dec edi
    27.        dec ebx
    28.        jnz @B
    29.        cmp esi,4
    30.        jne @1
    31.        ret
    32. _sprintf endp
     
  5. Coban

    Coban New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2006
    Сообщения:
    5
    Avoidik, попробуй у себя выполнить и догадайся почему вылетает
    Код (Text):
    1. mov eax, -1
    2. cdq
    3. mov ecx, 16
    4. div ecx