Título: duda con parametros sin definir y saber su direccion Publicado por: asmnb en 14 Agosto 2011, 05:52 am hola de nuevo ;D , tengo una funcion en c que lleva un parametros fijo, y luego permite mas parametros que no estan definidos ,
lo que necesito es saber con asm la direccion de esos parametros, pero aqui viene el tema de la convencion de llamada me parece :-\ , yo en este caso quisiera saber la direccion del segundo parametro, porque yo se que se le va a pasar 1 mas, por eso digo el segundo Código: int AgregarRegistro(int reg_tipo, ...) supongamos que la llamo asi Código: class Usuario reg; bueno yo necesitaria saber con asm la direccion de reg, esto lo haria dentro de la propia AgregarRegistro() alguna idea :huh: PS: noten que puse add 4 porque supuse que el primer parametro fijo ocupa 4 bytes, entonces despues de ese viene el segundo osea el que quiero, pero esto no estoy seguro, por eso pregunto Título: Re: duda con parametros sin definir y saber su direccion Publicado por: MCKSys Argentina en 31 Agosto 2011, 18:28 pm Hasta donde se, en ASM los params se PUSHean al reves de como los declaras.
Código: int AgregarRegistro(int param1, int param2) Si no es asi, debe ser al reves... ;D Saludos! Título: Re: duda con parametros sin definir y saber su direccion Publicado por: fary en 1 Septiembre 2011, 03:37 am Hasta donde se, en ASM los params se PUSHean al reves de como los declaras. Código: int AgregarRegistro(int param1, int param2) Si no es asi, debe ser al reves... ;D Saludos! no sería asi exactamente, fijate: Código
Aunque con las macros de las funciones y tal creo qeu variaria un poco. saludos. Título: Re: duda con parametros sin definir y saber su direccion Publicado por: _Enko en 1 Septiembre 2011, 06:31 am definitivamente asi no se hace en CDECL. (ni en stdcall, ni en fastcall... ni en ningun lado que conozca)
Citar pop eax ; dirección de retorno pop ecx ;primer parametro pop edx ;segundo parametro push eax invoke MessageBoxA,0,edx,ecx,0 La forma facil seria: Código: void PrintInts( int amount, ...) Tambien, en realidad lo hace de la siguiente manera, colocando comprobaciones de la pila de por medio. Código: lea eax,dword ptr [ebp+08h] Depura este ejemplo: http://www.cplusplus.com/reference/clibrary/cstdarg/va_start/ y se te solucionaran todas las dudas. Te conviene convertir ese ejemplo de float a int. Título: Re: duda con parametros sin definir y saber su direccion Publicado por: fary en 1 Septiembre 2011, 08:22 am Son diferentes formas de hacerlo... de la forma que yo púse tambien se puede hacer pero si tienes muchos parametros es mas lio obviamente :P
PD: tambien sirve con stdcall y etc. saludos. Título: Re: duda con parametros sin definir y saber su direccion Publicado por: _Enko en 1 Septiembre 2011, 14:52 pm Tu forma sirve unicamente para stdcall ya que la propia funcion limpia la pila. Stdcall no admite numero de parametros variables. (sobre esto va el hilo, nro prametros variables) ahora, si estas en C/C++, y usas cdecl, el que llama la funcion limpia la pila. Si se usa tu metodo, la plia muere. Y este hilo siempre fue sobre funciones en C con parametros variables. NO STDCALL |