Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: blackray en 9 Septiembre 2009, 19:33 pm



Título: [DUDA] mover a la pila
Publicado por: blackray en 9 Septiembre 2009, 19:33 pm
Aqui estoy con mis dudas  :xD

Segun lei los registros sp y bp contienen el valor mas reciente introducido en la pila y el valor de la base de la pila respectivamente.

Entonces...

mov ax,5
push ax ; la pila tiene de base el valor 5
mov bp,6 ; ????

Si movemos a el registro bp el valor 6, tambien se modifica el valor de la pila?

Saludos, y gracias! :P


Título: Re: [DUDA] mover a la pila
Publicado por: MCKSys Argentina en 9 Septiembre 2009, 22:40 pm
Hola!

ESP (Stack Pointer) es un PUNTERO al primer elemento de la pila (superior). Al hacer el push ax, el valor de ESP se incrementara en 2 bytes, obteniendo asi, un nuevo puntero al valor que acabas de pushear.

De la forma en que utilizas EBP (mov bp, 6), lo haces como si se tratara de un registro cualquiera (EAX, ECX, EDX). De esta forma NO modificas el stack.

Espero haberte ayudado...

Saludos!




Título: Re: [DUDA] mover a la pila
Publicado por: blackray en 10 Septiembre 2009, 00:58 am
Si me ayudaste :P

Y si hago...

mov ax,5
mov bp,6
push ax

En este caso perdere el 6 de bp y [bp] sera = a 5, estoy en lo correcto?

Gracias! :D


Título: Re: [DUDA] mover a la pila
Publicado por: MCKSys Argentina en 10 Septiembre 2009, 01:15 am
Me parece que estás confundiendo EBP con ESP.

Si haces:

Código:
mov ax, 5
mov bp, 6
push ax

El valor de BP pasa a ser 6 y [BP] (o mejor dicho, el valor de la posicion de memoria a la cual apunta BP) es incierto. Esto es, siempre y cuando no hayas colocado algo en esa posicion. Ahora, para hacer esto, mejor utiliza los registros "comunes": EAX, ECX, EDX.

En Windows hay reglas de conservación ó preservación de los regsitros. "Normalmente" nunca utilizas EBP en una rutina.

Para recuperar el valor pusheado, podrias hacer (en ECX):

Código:
pop cx

ó

Código:
mov cx, word ptr [esp]

Como vez, ESP es el que se utiliza a la hora de trabajar con la pila...

Sin ánimos de ofender, te recomiendo un tutorial básico de ASM. Te puede sacar este tipo de dudas...


Saludos!


Título: Re: [DUDA] mover a la pila
Publicado por: blackray en 10 Septiembre 2009, 03:07 am
Muchas gracias y disculpa las molestias :P

Yo lei un tutorial basico de asm, el problema es que dicen: bp apunta a la base de la pila y sp a el valor que acaba de ser empujado a ella y si solo metemos un valor, yo creia que bp y sp iban a apuntar a la misma posicion  :xD

Saludos!