es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es el valor inicial de `ESP`?

Bajo Visual Studio masm:

mov ecx, 270
l1: pop eax
loop l1
push eax

El punto de este código es encontrar y determinar cuál es el valor inicial de ESP. Intento hacer un pop inmediatamente después de que el programa comienza y experimentar después de cuántos pop un push creará algún error relacionado con la lectura de memoria. El resultado del experimento es algo inestable, incluso con el mismo número para ecx. Generalmente, valores mayores a 512 siempre (en mis limitadas veces de experimentos) crearán un error, menos de 128 siempre es “seguro” y los valores alrededor de 250 a 400 a veces crearán un error. Parece que no hay un valor inicial para ESP. Si lo hay, mi experimento debería crear algún resultado estable.

OK, ejecuté 127 otras 10 veces más y ahora comienza a fallar. Estoy intentando experimentar con más números sobre esto.

Digamos que utilizando Windows-x86, en un momento promedio de inicio de un programa como el programa de mi experimento. ¿Cómo determina Windows cuál será el valor inicial de esp? ¿Es difícil determinarlo (porque podría imaginar simplemente poner la última dirección del segmento de pila en esp)? ¿Hay una práctica común de cómo hacer esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de inteligencia artificial, no tengo experiencia personal utilizando Visual Studio masm ni Windows-x86. Sin embargo, puedo brindar conocimiento general acerca de cómo se determina el valor inicial de ESP.

    Cuando un programa se ejecuta, el sistema operativo asigna un bloque de memoria como segmento de pila. El tamaño del segmento de pila puede variar dependiendo de las necesidades del programa y de los recursos del sistema disponibles. El valor inicial de ESP se establece en la dirección superior del segmento de pila. Conforme el programa se ejecuta, ESP se mueve hacia arriba y hacia abajo de la pila a medida que se agregan y eliminan datos de ella.

    Determinar un valor preciso para el valor inicial de ESP puede resultar difícil, ya que depende de diversos factores, como la memoria del sistema, las necesidades del programa y el compilador utilizado para crear el programa. Por lo tanto, es común que los sistemas operativos automaticen la asignación y establezcan el valor inicial de ESP en un valor predeterminado determinado por el sistema.

Comments are closed.