llamada empuja el valor actual del registro PIR (dirección de retorno) a la pila + hace la llamada
ret aparece la dirección de retorno (que llamada empujó a) de la parte superior de la pila (RSP registrar puntos allí) y lo escribe en el registro RIP.
Ejemplo en un cuadro GNU/Linux: la función f llama a la función g y veamos el marco de g.
resolver el bajo
... < - RSP (stack pointer muestra la parte superior de la pila) registrará los puntos en esta dirección
VARs locales de g
puntero de base de f (valor RBP edad) < - RBP (puntero de base) se registra puntos en esta dirección
dirección ret de f (valor de RIP de edad) (esto es lo que la llamada (desde f) empujó, y lo que el ret (desde g) emergerá)
args que f llamaron g y no encajaron en los registros (creo que en Windows esto es diferente)
...
ALTA DIRECCIÓN
g liberará a los VARs locales (movq% RSP,% RBP)
g aparecerá la "vieja RBP" y lo almacenan en el registro de tales prácticas (pop% RBP)
g se ret, que modificará RIP con el valor que se almacena en el RSP apunta a
creo que sirve
'¿Cómo funciona acuerdo call' con él, entonces? Sólo quiero ver donde la dirección ret * * es especificado – Mask
Tendrás dividido el método de llamada para codificar más el código hexadecimal. La hoja de trucos para el conjunto de instrucciones especificado para el procesador en particular lo revelaría. Por ejemplo, si toma el microprocesador 8085 más simple y la instrucción ADD X no mostrará el segundo valor (supongamos que S le gusta AGREGAR X, Y). En su lugar, agregará el valor X a algún registro reservado dentro del procesador, digamos H y almacenará el valor en H. El bit de desbordamiento debería haber alguno almacenado en otro registro. Así es como está diseñada la instrucción ADD. La instrucción CALL también tendrá reglas predefinidas similares. – bragboy
. Parte del trabajo de la instrucción de llamada es insertar la dirección de retorno en la pila. La dirección de retorno es solo la dirección directamente después de los parámetros de la instrucción de llamada. Para ver cuál es la dirección de devolución en su ejemplo anterior, tendría que mirar la pila tan pronto como el programa entre en el procedimiento en 0x4012d0. –