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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Sobre paso de parámetros y retorno de funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sobre paso de parámetros y retorno de funciones  (Leído 3,994 veces)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Sobre paso de parámetros y retorno de funciones
« en: 12 Agosto 2014, 17:06 pm »

Hola :D

¿Qué veis mejor? ¿Pasar parámetros a funciones en la pila, o en registros?

Yo veo más sencillo pasar parámetros con un registro, así asegurarse de que la pila no cambia. Pero no se que es lo más "normal".

Por ejemplo, ¿al pasar parámetros a funciones con la pila, esas funciones van a leer la pila y dejarla como está, o van a quitar los valores de la pila?

Algunas dudillas que me quedaron al programar ASM xD


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Sobre paso de parámetros y retorno de funciones
« Respuesta #1 en: 12 Agosto 2014, 17:30 pm »

Para depurar la pila sin duda, cuando se usan registros cada funcion los va sobreescribiendo y analizar un dump es doloroso.

Lo normal hoy en dia es usar registros, es la convencion de llamada stdcall en x64 y (el Kernel) Linux tambien usa registros. Igual son limitados, al final terminas usando la pila ...

Eso depende de la convencion de llamada, la de C limpia la pila el llamador despues de llamar, en stdcall el llamado pero eso se hace justo al retornar con retn (no es que se quiten los valores, simplemente se ajusta el puntero ESP). Ambas casos los podes analizar creando un sencillo programa en C que llame a la API de Windows y a printf por ejemplo.


« Última modificación: 12 Agosto 2014, 17:34 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Sobre paso de parámetros y retorno de funciones
« Respuesta #2 en: 12 Agosto 2014, 17:33 pm »

Citar
¿Qué veis mejor? ¿Pasar parámetros a funciones en la pila, o en registros?

Veo mejor usar registros, a eso se le llama sistema "fastcall". El motivo ya lo dice el nombre, trabajar con los registros es mejor que con la pila.

Citar
Por ejemplo, ¿al pasar parámetros a funciones con la pila, esas funciones van a leer la pila y dejarla como está, o van a quitar los valores de la pila?

Si haces un disassembler veras que cargan directamente los valores en la pila, luego la funcion llamada los lee, normalmente suelen limpiarla o dejarla como antes, pero pierdes optimizacion, por eso es mejor usar registros, desde este punto de vista.

Un saludo.
En línea

daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: Sobre paso de parámetros y retorno de funciones
« Respuesta #3 en: 12 Agosto 2014, 17:36 pm »

preguntas por curiosidad o por un caso en especifico?

Citar
¿Qué veis mejor? ¿Pasar parámetros a funciones en la pila, o en registros?
pues como todo depende pero por ejemplo la api de windows usa la pila si vas a hacer un messagebox harias:

Código
  1. push ultimoparametro
  2. push penultimo
  3. push mensaje
  4. push primero
  5. call messagebox
  6.  
Citar
¿al pasar parámetros a funciones con la pila, esas funciones van a leer la pila y dejarla como está, o van a quitar los valores de la pila?

cuando lees un valor de la pila  con
Código
  1. pop
lo estas sacando. imagina la pila como poner objetos uno encima de otro el primero que sacas es el ultimo que pusiste


En línea

buenas
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Sobre paso de parámetros y retorno de funciones
« Respuesta #4 en: 12 Agosto 2014, 17:39 pm »

En x86 stdcall usa sola la pila pero en x64 se usan primero los registros.

http://en.wikipedia.org/wiki/X86_calling_conventions#Microsoft_x64_calling_convention
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sobre paso de parámetros y retorno de funciones
« Respuesta #5 en: 12 Agosto 2014, 19:21 pm »

cuando lees un valor de la pila  con
Código
  1. pop
lo estas sacando. imagina la pila como poner objetos uno encima de otro el primero que sacas es el ultimo que pusiste

Recuerda que también se puede leer la pila sin POP.

Gracias por las respuestas :D Estaba yo haciendome una librería, y no sabía si dejar el tema de llamadas con registros, o cambiarlo a la pila. Pero la verdad, los registros me parecen más sencillos jaja
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Sobre paso de parámetros y retorno de funciones
« Respuesta #6 en: 12 Agosto 2014, 19:34 pm »

Gracias por las respuestas :D Estaba yo haciendome una librería, y no sabía si dejar el tema de llamadas con registros, o cambiarlo a la pila. Pero la verdad, los registros me parecen más sencillos jaja

Si, pero ojo que los registros son finitos y si las funciones tienen muchos parametros tenes que recurrir a la pila igual; sino usa punteros a estructuras para pasar los parametros ... que normalmente terminan siendo variables locales en la pila tambien  ;D
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Paso de parametros por referencia...funciones
Programación C/C++
soser 2 4,573 Último mensaje 2 Septiembre 2010, 22:33 pm
por soser
Paso de parámetros a funciones en C
Programación C/C++
LoQueSeaPI 1 2,422 Último mensaje 16 Septiembre 2016, 04:49 am
por crack81
Paso de funciones a otras funciones
Programación C/C++
eaz95 1 2,483 Último mensaje 18 Julio 2017, 11:59 am
por ivancea96
Ayuda funciones con retorno de valor en C
Programación C/C++
omegadei 2 1,864 Último mensaje 21 Marzo 2018, 20:04 pm
por omegadei
Consulta sobre retorno en las funciones
Programación C/C++
NicoSanhueza 3 2,593 Último mensaje 26 Junio 2018, 17:49 pm
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines