title image


Smiley Re: Assembler
Hallo,



jetzt muss ich mir mal wieder selbst antworten ;)



also das mit dem Basepointer war quatsch, das bitte ich zu entschuldigen



Folgendes sollte eigentlich passieren, wenn Du eine Funktion ausfuehrst:

Der call-Befehl schmeiß die Adresse der naechsten Anweisung auf den Stack

und setzt den EIP auf die erste Anweisung der Funktion



so weit so gut - was jetzt kommt, ist nicht zwingendermassen so, sollte aber in

fast allen (i386er 32-Bit) OSes so laufen:



Die Funktion rettet erst einmal den Basepointer mit push ebp

Fuer den einfachen Zugriff auf die Parameter, die im Stack oberhalb der

Ruecksprungadresse liegen, wird der Basepointer gesetzt mov ebp,esp

Jetzt kann der erste Paramerter ueber ebp+8, der zweite ueber ebp+12

u.s.w. erreicht werden

die Funktion tut wofuer sie da ist



der Stackpointer wird wieder zurueckgestellt mov esp,ebp

der Basepointer wird wieder hergestellt pop ebp

(jetzt zeigt der Stackpointer auf die Ruecksprungadresse)

der ret-Befehl wird ausgeführt, der den EIP mit dem Wert vom

Stack belegt und den Stack um 4 erhoeht





Das Hauptprogramm ist verantwortlich fuer die Bereinigung des Stacks um die Paramerter

add esp,4*AnzahlDerParameter oder so aehnlich, kommt drauf an, wie Du Deine

Parameter uebergeben hast.



Fuer eigene Assembler-Unterroutinen kannst Du das ganze natürlich auch anders loesen



Ich hoffe, diesmal habe ich keinen Mist geschrieben

Gruß

PhysChemist

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: