Actualmente estoy aprendiendo ensamblaje para procesadores Intel. Desde la pila 'crece hacia abajo', ¿por qué tenemos que añadir con el fin de acceder a un elemento específicoregistros de ensamblaje esp y ebp
[ebp + 8] ;; This will access the first param
I konw tenemos que omitir el valor ebp de edad y la dirección de retorno y es por eso que utilizamos 8 (porque cada uno tiene 4 bytes de longitud). Esto es un poco extraño.
Además, si ebp es una copia de seguridad de esp, ¿cuál es el valor de EBP en la función principal Ex:
_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
y también cuando nos asignar memoria para los locales, tenemos que restar desde ebp ... Por favor, brinde una respuesta no ambigua. ¡Gracias!
Una función main() no es diferente de una función normal, tiene un prólogo también. No mostró uno en su fragmento de ensamblaje, no estoy seguro por qué. El espacio para los locales se crea ajustando esp, no ebp. –
Hay las mismas preguntas: http://stackoverflow.com/questions/1395591/what-is-excaly-the-base-pointer-and-stack-pointer-to-what-do-theypoint, y otras vinculadas a es – Abyx