elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  x64 ajustar la pila
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: x64 ajustar la pila  (Leído 3,748 veces)
luisferfago

Desconectado Desconectado

Mensajes: 15


Ver Perfil
x64 ajustar la pila
« en: 8 Marzo 2015, 23:39 pm »

hola!

en x64 los 4 primeros parametros se ponen en: rcx, rdx, r8, r9, y el resto de parametros si se necesitan van a la pila. ok, entendido.

pero lo que NO ENTIENDO es COMO SE AJUSTA LA PILA.

o sea, en esta llamada a MessageBoxA:

sub   rsp, 28h
xor   rcx, rcx
lea   rdx, qword ptr [lpText]
lea   r8, qword ptr [lpCaption]
xor   r9, r9
call   MessageBoxA

por que se resta a rsp 28h?
sí: hay que ajustar la pila y dejar espacio para los 4 parametros, pero entonces seria:
4 * 8 = 32 y en hexadecimal 20h.

¿ese 8 extra, para que quede 28h, por que se añade?

se que tiene que ver con algo de ALINEAR LA PILA, ¿a 8? ¿a 16? ....

¿alguien lo sabe? ¿alguien me lo explica? gracias!


En línea

BloodSharp


Desconectado Desconectado

Mensajes: 814


¡ Hiperfoco !


Ver Perfil WWW
Re: x64 ajustar la pila
« Respuesta #1 en: 9 Marzo 2015, 00:42 am »

4 * 8 = 32 y en hexadecimal 20h.

¿ese 8 extra, para que quede 28h, por que se añade?

La verdad que no tengo idea sobre x64 porque siempre apliqué ingeniería inversa para x86, pero ¿probaste ver si era para la dirección del caller? osea depurar poniendo un bp en la llamada y ver si en tiempo de ejecución tiene que ver dicha dirección...

se que tiene que ver con algo de ALINEAR LA PILA, ¿a 8? ¿a 16? ....

Tengo entendido que cuando se alinea la pila sube el registro sp y no baja porque la rutina que quieras llamar en su convención de llamada no sube manualmente el sp justo antes de retornar... (ejemplo cdecl)


B#


En línea



xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: x64 ajustar la pila
« Respuesta #2 en: 9 Marzo 2015, 01:04 am »

Eso es un dissasembler o un fragmento de code en ASM? Como no veo todo el code se hace dificil decirte algo.

El sistema de llamada que estas usando se llama fastcall, como bien dijiste usa los registros para el paso de parametros a las funciones, como los registros son limitados si la funcion tiene demasiados parametros este sistema se apoya en la pila.

Pero este no es el caso, ya que MessageBoxA tiene 4 parametros, segun MSDN. No tiene sentido usar la pila ya que no se requiere, o ese es mi punto de vista.

Ese sub no esta reservando espacio en la pila para los parametros ya que estos se pasan en los registros, no tiene sentido.

Asi que me remito a mi primera pregunta y linea.

Un saludo.
En línea

luisferfago

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: x64 ajustar la pila
« Respuesta #3 en: 9 Marzo 2015, 08:37 am »

gracias BloodSharp y cpu2 por contestar.
En línea

luisferfago

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: x64 ajustar la pila
« Respuesta #4 en: 9 Marzo 2015, 09:11 am »

cpu2:

el trozo de codigo que ponia son las 6 lineas de una simple llamada a MessageBoxA en x64.
(no se necesita ver mas codigo, con esas 6 lineas vale para entender)

ese sub sí esta reservando espacio de pila para los parametros. aunque los parametros se pasen en registros: da igual.

regla en x64: el codigo que llama (en este caso las 6 lineas en asm) tiene que reservar espacio en la pila (creo que tantos qwords como parametros use), para que el codigo llamado (en este caso el user32.dll donde esta el MessageBoxA) pueda tener la posibilidad si quiere, de copiar esos parametros (que le llegan en registros) a la pila.

......................

finalmente: me respondo a mi mismo   :) la pregunta que hacia al foro:

es que investigué un poco y me parece que di con la solucion.

yo preguntaba que ese alinear la pila, como se hacia.
la respuesta es: en x64 hay que alinear la pila a 16 bytes.

entonces en el ejemplo: hay 4 parametros, luego hay que reservar 4 qwords. luego está la direccion de retorno que meterá la call, pero aqui no necesitamos reservar nada.
entonces tenemos que en la pila se ocuparan 5 qwords. como hay que alinear la pila a 16 bytes, eso hace que necesitemos reservar otro qword.

en total nuestro codigo tiene que reservar: 5 qwords.

y (5 * 8) = 40 bytes = 28h.

 :-*
En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: x64 ajustar la pila
« Respuesta #5 en: 9 Marzo 2015, 12:31 pm »

Acabo de leer la MSDN, y el sistema fastcall que usa Windows hace como un seguimiemto de la pila.

En sistemas Unix y demas no requiere hacer tal cosa con llamadas fastcall, se utilizan los registros para el paso de parametros y no hace falta reservar nada.

Claro que es Windows, y ya por naturaleza no quiero buscarle la logica...

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ajustar audio
Multimedia
S@r@z@ 2 2,028 Último mensaje 12 Marzo 2006, 23:49 pm
por S@r@z@
ajustar formulario a la resolucion
Programación Visual Basic
soru13 3 3,053 Último mensaje 22 Junio 2007, 01:58 am
por Hans el Topo
Ajustar avatar « 1 2 »
Sugerencias y dudas sobre el Foro
GN1000 12 5,361 Último mensaje 12 Julio 2007, 23:44 pm
por Swicher
ajustar ram a 1866mhz
Hardware
gines333 8 5,120 Último mensaje 24 Enero 2023, 21:46 pm
por Manatidoble
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines