2010-03-17 14 views
10

Por lo tanto, estoy un poco confundido acerca de dibujar un marco de pila para mi código de ensamblaje. Tengo la sensación de que comencé mal.Dibujando un marco de pila para el ensamblaje x86

Esto es lo que obtuve hasta ahora, pero como pueden ver, estoy confundido en el paso 5, porque creo que mi diseño inicial es incorrecto.

enter image description here enter image description here

¿Me puede decir que hice mal?

Respuesta

25

Creo que comenzaría con un diagrama que mostraba una cantidad (semi) arbitraria de espacio vacío en la "parte superior" de la pila, y probablemente muestre EBP y ESP a la izquierda, con flechas para mostrar dónde a lo que apuntan. He usado flechas sólidas para "puntos a" y he usado el movimiento de datos (en retrospectiva, podría ser mejor invertirlo).

alt text

+0

Guau, eso es genial diagrama. ¿Qué programa usaste para dibujarlo? Lo revisaré mañana, ya que mi cerebro está frito esta noche. – drozzy

+3

En una palabra, Vizio. –

+0

Supongo que los diagramas están en la orientación de arriba a abajo de izquierda a derecha. Entonces no estoy seguro de cómo en el 3er diagrama: tiene tanto EBP como ESP apuntando a la misma dirección inicialmente. Quiero decir en el diagrama anterior que eran diferentes. – drozzy

2

La distancia entre el ebp actual (una vez que se captura de esp) y y es de hecho 8 bytes en este caso ya que tiene el eip de retorno y el valor del ebp anterior en la pila. Su diagrama es correcto por lo que puedo decir, aunque las direcciones de la izquierda son más confusas :)

0

Tiene razón con su diagrama. El compilador usa algunos trucos de optimización: la primera llamada es "bastante normal", de hecho el parámetro "f" se coloca en la parte superior de la pila. La segunda llamada se pospone después de la limpieza del contexto local (instrucción "dejar"), y el parámetro de la función "h" se "recicla" para que contenga "2". Que la segunda "llamada" a "f" se convierta en un simple "jmp", ya que es la última línea en la función de llamada "h" (el contexto de "h" ya ha sido descartado por "dejar").

¡Adiós!

1

El diagrama muestra parámetros por debajo de la dirección de retorno, que es realmente mal.

Suponiendo que la pila crece hacia direcciones más bajas, si hay necesidad de poner parámetros en la pila, residen en direcciones más altas en comparación con la dirección de retorno.

Cuestiones relacionadas