Autor Thema: C -> ASM -> C (argumente & return)  (Gelesen 2222 mal)

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« am: 20. January 2007, 11:26 »
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)

 

Einloggen