我正在尝试将 CrapWOW 哈希从http://www.team5150.com/~andrew/noncryptohashzoo/CrapWow.html转换为 delphi 或者更确切地说是 basm。我的asm技能非常有限,但我认为这不会太难......
无论如何,在一些关于 asm 转换的网页的帮助下,我来到了这个,但它不起作用......特别是,对于最后一部分,我不知道如何转换。这是将寄存器分配给参数和返回参数吗?
function CrapWow(key: PAnsiChar; len, seed: Cardinal): Cardinal;
//finline u32 fastcall CrapWow( const u8 *key, u32 len, u32 seed ) {
// #if !defined(__LP64__) && !defined(_MSC_VER) && ( defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) )
// // esi = k, ebx = h
// u32 hash;
// asm(
asm
lea esi, 5052acdbh[ecx+esi] //leal 0x5052acdb(%ecx,%esi), %esi
mov ebx, ecx //movl %ecx, %ebx
cmp ecx, 8 //cmpl $8, %ecx
jb @DW
@QW: //QW%=:
mov eax, 5052acdbh //movl $0x5052acdb, %eax
mul [edi] //mull (%edi) << CRASH HERE
add ecx, -8 //addl $-8, %ecx
xor ebx, eax //xorl %eax, %ebx
xor esi, edx //xorl %edx, %esi
mov eax, 57559429h //movl $0x57559429, %eax
mul 4[edi] //mull 4(%edi)
xor esi, eax //xorl %eax, %esi
xor ebx, edx //xorl %edx, %ebx
add edi, 8 //addl $8, %edi
cmp ecx, 8 //cmpl $8, %ecx
jae @QW //jae QW%=
@DW: //DW%=:
cmp ecx, 4 //cmpl $4, %ecx
jb @B //jb B%=
mov eax, 5052acdbh //movl $0x5052acdb, %eax
mul [edi] //mull (%edi)
add edi, 4 //addl $4, %edi
xor ebx, eax //xorl %eax, %ebx
add ecx, -4 //addl $-4, %ecx
xor esi, edx //xorl %edx, %esi
@B: //B%=:
test ecx, ecx //testl %ecx, %ecx
jz @F //jz F%=
shl ecx, 3 //shll $3, %ecx
mov edx, 1 //movl $1, %edx
mov eax, 57559429h //movl $0x57559429, %eax
shl edx, cl //shll %cl, %edx
add edx, -1 //addl $-1, %edx
and edx, [edi] //andl (%edi), %edx
mul edx //mull %edx
xor esi, eax //xorl %eax, %esi
xor ebx, edx //xorl %edx, %ebx
@F: //F%=:
lea edx, 5052acdbh[esi] //leal 0x5052acdb(%esi), %edx
xor edx, ebx //xorl %ebx, %edx
mov eax, 5052acdbh //movl $0x5052acdb, %eax
mul edx //mull %edx
xor eax, ebx //xorl %ebx, %eax
xor esi, edx //xorl %edx, %esi
xor eax, esi //xorl %esi, %eax
//No idea how to convert this...
// : =a(hash), =c(len), =S(len), =D(key)
// : c(len), S(seed), D(key)
// : %ebx, %edx, cc
// );
// return hash;}
end;
我很高兴能在这方面得到一些帮助。
骑士杀手