Englisch ist es nicht meine erste Sprache, also wenn ich falsch einige Wörter falsch buchstabiere. Ich habe einige Probleme mit dem Stack, alle Codes, die ich hier setzen werde, funktionieren perfekt.kann mir jemand den Stack dieses Codes erklären?
Dieser Code zum Beispiel ist einfach und ich verstehe den Stapel davon.
.globl f f: push %ebx movl 8(%esp), %eax movl 12(%esp), %ebx addl %ebx, %eax ret
STACK
------- VAR Y --> ESP + 12 ------- VAR X --> ESP + 8 ------- RET --> RETURN ------- %EBX --> %ESP -------
Aber mit diesem Code Ich habe einige t
.code32 .globl f f: pushl %ebx movl 8(%esp), %ebx subl $8, %esp # Creo posto nella stack per i parametri movl $1, (%esp) movl $2, 4(%esp) call a addl %ebx, %eax addl $8, %esp #Tolgo posto nella stack popl %ebx ret
Der Code funktioniert perfekt, aber ich habe viele Fragen darüber ?. Wo ist jetzt% ebx und ret auf Stack?
Code of asm transalted in c:
int f(int x){ return x + g(y,z); }
Und dies ist der Stapel, der i
STACK
-------- 8(%esp) --> x parameter of function f -------- 4(%esp) --> z parameter of function g -------- (%esp) --> y parameter of funcion g --------
So ist die Frage jetzt gemacht haben, ist, wo sind% ebx und auf diesem Stapel jetzt ret?