Attualmente sto imparando l'assemblaggio per processori Intel. Dal momento che la pila 'cresce verso il basso', perché dobbiamo aggiungere al fine di accedere ad un elemento specificoregistri di montaggio esp e ebp
[ebp + 8] ;; This will access the first param
I konw dobbiamo saltare il vecchio valore EBP e l'indirizzo di ritorno ed è per questo che usiamo 8 (perché ognuno è lungo 4 byte). Questo è un po 'strano.
Inoltre, se EBP è una copia di backup per esp, qual è il valore di EBP nella funzione principale Es:
_start:
;; what's ebp value here ?
push eax
push ebx
call someFunction ;; this will create a stack frame
+-----------+
| param1 |
+-----------+
| param0 | <--- this is [ebp + 8] (assuming mov ebp, esp)
+-----------+
|ret_address|
+-----------+
| ebp |
+-----------+ <--- esp
E anche quando abbiamo allocare memoria per i locali, dobbiamo sottrarre da ebp ... Si prega di dare una risposta non ambigua. Grazie!
Una funzione main() non è diversa da una funzione normale, ha anche un prologo. Non ne hai mostrato uno nello snippet di assembly, non so perché. Lo spazio per i locali viene creato regolando esp, non ebp. –
Ci sono le stesse domande: http://stackoverflow.com/questions/1395591/che-si-esattamente-il-base-pointer-and-stack-pointer-to-what-do-they-point, e altri collegati a it – Abyx