Otóż kombinuje coś z połączeniem ASM i C i mam problem z tym kodem
#include <stdio.h>
int my_strlen(const char *buf){
return strlen(buf);}
extern unsigned int;
hash(const char *salt, const char*buf)
__asm ("\
.global _hash\n\
_hash:\n\
push ebp\n\
mov ebp, esp\n\
sub esp, 0x24\n\
mov [ebp-0x10], 0x89AF83AC\n\
mov eax, [ebp+0x8]\n\
mov [esp+0x24-0x24], eax\n\
call my_strlen\n\
mov [ebp-0xC], eax\n\
mov eax, [ebp+0xC]\n\
mov [esp-0x24], eax\n\
call my_strlen\n\
mov [ebp-0x8], eax\n\
mov [ebp-0x14], 0\n\
jmp short loc_804847C\n\
\n\
loc_804841B:\n\
mov eax, [ebp-0x14]\n\
cdq\n\
idiv dword ptr [ebp-0xC]\n\
mov eax, edx\n\
add eax, [ebp+0x8]\n\
movzx eax, byte ptr [eax]\n\
movsx eax, al\n\
lea ecx, [eax+eax]\n\
mov eax, [ebp-0x14]\n\
cdq\n\
idiv dword ptr [ebp-0x8]\n\
mov eax, edx\n\
add eax, [ebp+0xC]\n\
movzx eax, byte ptr [eax]\n\
movsx eax, al\n\
xor eax, ecx\n\
mov [ebp-0x4], eax\n\
mov edx, [ebp-0x14]\n\
mov eax, edx\n\
sar eax, 0x1F\n\
mov ecx, eax\n\
shr ecx, 0x1B\n\
lea eax, [edx+ecx]\n\
and eax, 0x1F\n\
sub eax, ecx\n\
mov ecx, eax\n\
rol [ebp-0x4], cl\n\
mov eax, [ebp-0x10]\n\
ror eax, 0x1B\n\
xor [ebp-0x4], eax\n\
mov eax, [ebp-0x14]\n\
imul eax, 0x4D2\n\
xor eax, [ebp-0x4]\n\
xor [ebp-0x10], eax\n\
inc [ebp-0x14]\n\
\n\
loc_804847C:\n\
cmp [ebp-0x14], 0x2E\n\
jle short loc_804841B\n\
leave\n\
ret");
int main()
{
printf("%.8x\n",hash("salt","asdfg"));
}
I błędy przy kompilacji