Witam.
Mam taki problem i już nie wiem jak go rozwiązać :/
Mam taką funkcję w ASM:
; long send_msg(unsigned long handle, msg_t * msg);
GLOBAL _send_msg
_send_msg:
push ebp
mov ebp, esp
mov ebx, [ebp + 8]
mov ecx, [ebp + 12]
mov eax, 1234
int 0x80
leave
ret
I teraz wywołuje ją z C w pętli:
void test_ipc(void)
{
int i;
for (i=0;i<10;i++)
{
send_msg(i, &msg);
}
}
I po uruchomieniu tego kodu, program zapętla się a i cały czas jest równe 0 (wiem bo funkcja 1234 w moim osie pokazuje stan rejestrów a w ebx jest i)
Teraz modyfikuję kod do postaci:
void test_ipc(void)
{
int i;
for (i=0;i<10;)
{
i++;
send_msg(i, &msg);
}
}
Uruchamiam i widzę 10 razy wysołane 0x80 a i się zwiększa :/
Czy ktoś może wie czemu tak się dzieje, bo ja już nie mam pomysłu :>
Pozdro.