Saltar al contenido

¿Qué son los registros ESP y EBP?

María, parte de este gran equipo, nos hizo el favor de escribir este escrito ya que conoce muy bien este tema.

Solución:

esp es el puntero de la pila, ebp es/era para un marco de pila, de modo que cuando ingresaste una función, ebp podría obtener una copia de esp en ese punto, todo en la pila antes de que eso suceda, dirección de retorno, parámetros pasados, etc. que son globales para esa función (variables locales) ahora será un static distancia desde el puntero del marco de pila durante la duración de la función. esp ahora es libre de moverse como desee el compilador y se puede usar cuando se anida en otras funciones (cada una necesita preservar el ebp de forma natural).

es una forma perezosa de administrar la pila. hace que la depuración del compilador sea mucho más fácil, facilita la comprensión del código generado por el compilador, pero quema un registro que de otro modo podría haber sido de propósito general.

Normalmente, EBP se usa para hacer una copia de seguridad de ESP, por lo que si el código cambia ESP en una función, todo lo que se necesita para restaurar ESP es mov ESP, EBP. Además, dado que el código de una función normalmente no modifica EBP, se puede usar para acceder a parámetros pasados ​​o variables locales sin tener que ajustar las compensaciones.

Para el uso de “marco de pila”, EBP se inserta en la pila al comienzo de cualquier función, por lo que el valor de EBP insertado en la pila es el valor de EBP de la función que llamó a la función actual. Esto hace posible que el código o un depurador “retrocedan” a través de todas las instancias en las que se colocó EBP en la pila, y cada instancia de un valor de EBP en la pila podría considerarse como el puntero base de un marco de pila. .

Tenga en cuenta que algunos compiladores tienen una opción de “omitir punteros de marco”, en cuyo caso EBP no se usa para guardar ESP o como un puntero de marco de pila. En su lugar, el compilador realiza un seguimiento de ESP y todas las compensaciones locales son compensaciones del valor actual de ESP.

EBP y ESP son remanentes de la era, donde los compiladores, por ejemplo, no tenían static análisis para detectar cuántos bytes de una pila se necesitan en una llamada de función. Además, se suponía que la pila crecería y se reduciría dinámicamente durante la ejecución de una función, las interrupciones habrían permitido destruir toda la pila de 0 a SP, y el código espagueti era el estándar de facto. En realidad, las interrupciones (y el paso de parámetros solo a través de registros) fueron el método diseñado para llamar a las funciones del núcleo.

En estos alrededores uno necesidades tener un punto fijo de la pila, donde siempre se encuentra la dirección de retorno de la persona que llama, las variables locales y los argumentos de una función. Por lo tanto, la bp el registro estaba justificado. En esta arquitectura bp se permitió que se indexara ([bp – 300h]), pero sp no lo fue Esos códigos de operación/codificación de instrucciones que podrían haber sido interpretados como mov ax, [sp + 1111h] fueron reutilizados para otros fines.

En 386+ ya través de la introducción de la ‘E’, ESP ganó la propiedad de compensación. En este momento EBP se liberó del único propósito, como esp fue capaz de manejar ambas tareas.

Tenga en cuenta que incluso ahora EBP apunta a la memoria a través de la pila segmento (SS), al igual que ESP. Otros modos de direccionamiento (sin ESP/EBP como base) por defecto al segmento DS. (absoluto, DI, SI y/o BX en modo de 16 bits, y en modos de direccionamiento de 32 bits cualquier registro puede ser base en un modo de direccionamiento).

valoraciones y comentarios

Si posees alguna desconfianza o capacidad de desarrollar nuestro tutorial eres capaz de añadir una referencia y con gusto lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *