Błąd w kompilacji C i ASM

0

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
user image

1

No ale czego w tych wiadomościach nie rozumiesz?
Musisz sprecyzować rodzaj operandów (dword etc.).

0

Dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1