Hi
Ich möchte von C aus eine ASM-Funktion aufrufen, und dieser ein Argument mitgeben. Diese ASM-Funktion soll nun eine C-Funktion aufrufen, und an dieser das Arguiment weiterleiten.
1. C-Funktion
reosappi = (int (*)(int))address;
int retvalue = reosappi((int)&api);
Die Funktion "int reosappi(int argument);" wird aufgerufen
reosappi ist in ASM geschrieben:
start:
pop eax ; rücksprungadresse
pop ebx ; Argument 01
push ebx ; Kopie von Argument 01 sichern
push eax ; rücksprung-Adresse wieder zurück
push ebx ;jetzt ist das argument für _main
call _main
add esp, 0x04 ;argument "löschen" (liegt noch auf'm stack)
mov eax, 0x00FF00FF ;TEST
ret
_main:
int main(int apiaddr)
{
api = (int (*)(int,int)) apiaddr;
int x = api(RAPI_TEST, 0);
return x;
}
So nun zum Problem:
Die Funktion "int api(int,int) wird 2 mal aufgerufen!! (oder _main)
und der rückgabewert ist 0xFFFFFFFF anstatt des im ASM-teil festgekegten 0x00FF00FF...
Wo liegt der Fehler (vermutlich im ASM-Teil)