La "pila de llamadas" en lenguaje C se implementa como una lista vinculada en las API binarias x86 (y la mayoría de las otras).
Es decir, la llamada al procedimiento en lenguaje C sigue una disciplina de primero en entrar, último en salir. El resultado de ejecutar llamadas de función (posiblemente recursivas) se denomina "pila de llamadas" o, a veces, incluso "la pila".
La CALL
instrucción x86 termina implicando una lista vinculada usando la "pila de llamadas". Una CALL
instrucción empuja el contenido del registro% EIP, la dirección de la instrucción después de la CALL
memoria de la pila. El prólogo de función llamada empuja los contenidos del registro% EBP, la dirección más baja de las variables locales en la función de llamada, a la memoria de la pila. Luego, el prólogo de la función llamada establece% EBP en la base de la pila de la función actual.
Eso significa que% EBP es un puntero a una ubicación de memoria que contiene la dirección del valor% EBP de la función que realiza la llamada. Eso no es más que una lista vinculada, implementada parcialmente en hardware a través de CALL
.
En cuanto a lo que es bueno para esto, es cómo las CPU x86 implementan llamadas a funciones, particularmente llamadas a funciones donde la función tiene su propia copia de argumentos y variables locales a la función. Cada llamada a la función introduce cierta información en la "pila de llamadas" que permite que la CPU retome donde se quedó en la función de llamada, sin interferencia de la función llamada o la función de llamada.