Let`s see output from visual studio 2010 for inlined version of crc32:
Here list is alias for ecx register:
mov [ebp+params.list_rva], list
not cl
movzx list, cl ; ok, now in ECX 00 00 00 cl
mov eax, ds:CRCTable[list*4]
xor eax, 0FFFFFFh
movzx ebx, al
movzx list, ch ; wait, CH now zero bcs of previous movzx ecx, cl !
shr eax, 8
xor list, ebx
xor eax, ds:CRCTable[list*4]
movzx list, byte ptr [ebp+params.list_rva+2]
movzx ebx, al
shr eax, 8
xor list, ebx
xor eax, ds:CRCTable[list*4]
movzx list, byte ptr [ebp+params.list_rva+3]
movzx ebx, al
it is obvious that the result of this functions is incorrect
Комментариев нет:
Отправить комментарий