P
Also, der Rückgabewert einer Funktion liegt in C üblicherweise in eax. Das funktioniert so, dass die Funktion aufgerufen wird, die Funktion schreibt etwas nach eax und nach einem ret kann der Aufrufer der Funktion mit dem Wert in eax weiterarbeiten (oder auch nicht: void *gg*). Aus diesem Grund ist es auch möglich, die Multiplikation direkt nach dem Aufruf der Funktion durchzuführen.
Auf dem Stack werden nur die Parameter ausgelagert. Vor dem Aufruf mittels call werden die Parameter mittels push auf den Stack gelegt. Da unter C der Stack vom Aufrufer wieder aufgeräumt werden muss, muss das in unserem Fall der Aufrufer, also die Funktion fak selbst machen. Üblicherweise wird ein Wert mittels push auf den Stack gelegt, wobei implizit auch der Wert von ESP vermindert. Um einen Wert vom Stack zu holen, wird für gewöhnlich pop aufgerufen. Mittels diesem Befehl wird der Wert also vom Stack an eine bestimmte Stelle im Speicher kopiert, und anschließend der Wert von ESP wieder erhöht. Da bei meiner Funktion der Wert, der auf dem Stack lag, nach dem Aufruf nicht mehr wichtig war, habe ich mich damit begnügt, den ESP zu erhöhen.
lg, phreaking