Открыл исходничок sprintf, убрал всё лишнее, оставил только кусочек, который отвечает за 8x%. Вот часть кода: Код (Text): invoke MD5hash,offset Password,1,offset szMD5Result mov edi,offset HashBuf2 add edi,7 mov eax,szMD5Result.dtA mov ecx,16 mov ebx,8 @@: cdq div ecx movzx edx,byte ptr [lpHexTab+edx] mov byte ptr [edi],dl dec edi dec ebx jnz @B Полный hash состоит из 4х частей. szMD5Result.dtA, szMD5Result.dtС, szMD5Result.dtD - нормально переводит, а вот на szMD5Result.dtВ - вылетает... Не подскажите из за чего это может быть? Спасибо.
Avoidik, почемуж, всё правильно, помогло Coban, спасибо! Вот не оптимизированный, зато рабочий вариант Код (Text): _sprintf proc OutBuf:dword,h_a:dword,h_b:dword,h_c:dword,h_d:dword xor esi,esi @1: inc esi mov edi,OutBuf .if esi == 1 mov eax,h_a add edi,7 .elseif esi == 2 mov eax,h_b add edi,15 .elseif esi == 3 mov eax,h_c add edi,23 .else mov eax,h_d add edi,31 .endif mov ecx,16 mov ebx,8 @@: xor edx,edx div ecx movzx edx,byte ptr [lpHexTab+edx] mov byte ptr [edi],dl dec edi dec ebx jnz @B cmp esi,4 jne @1 ret _sprintf endp
Avoidik, попробуй у себя выполнить и догадайся почему вылетает Код (Text): mov eax, -1 cdq mov ecx, 16 div ecx