elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:42  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [C++] Método con número variable de argumentos de tipo desconocido
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Método con número variable de argumentos de tipo desconocido  (Leído 1,651 veces)
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
[C++] Método con número variable de argumentos de tipo desconocido
« en: 17 Abril 2009, 20:33 »

Hola

Estoy haciendo una plantilla con un método que recibe un número variable de argumentos, hasta ahí bien, el problema es que esos argumentos pueden ser de muchos tipos (incluidas estructuras, punteros, punteros a funciones, etc).

Para leer esos argumentos estoy usando la cstdarg y usando punteros a void para ello, el problema es que no se si existe alguna forma de conocer el tipo de dato sin pedírselo directamente al usuario.

Descarto usar el mecanismo que usa printf por ejemplo ya que tendría que hacer un case con 1.000 simbolos :P

Alguna idea u otro método para crear funciones con argumentos indefinidos?
Salu2


En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: [C++] Método con número variable de argumentos de tipo desconocido
« Respuesta #1 en: 17 Abril 2009, 20:54 »

No se realmente que haras con un numero variable de argumentos de tipo variable, pero tal vez estes buscando algo como RTTI:

http://en.wikipedia.org/wiki/RTTI
http://en.wikipedia.org/wiki/Typeid

Supongo que tambien podrias hacer una arquitectura donde todas las clases herederan de una clase base y etc. ...


« Última modificación: 17 Abril 2009, 20:57 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
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: [C++] Método con número variable de argumentos de tipo desconocido
« Respuesta #2 en: 17 Abril 2009, 22:19 »

No, no es eso lo que busco, explico un poco mejor lo que pretendo hacer:

Estoy haciendo una plantilla que cifra llamadas al api, la idea es que funcione así:

Código
EncryptApi<int> myMessageBox("MessageBoxA","USER32.DLL");
int retorno = myMessageBox(4, 0, "Cuerpo del mensaje", "Titulo :P", 0);
 

Para ello he sobrecargado el operador (). El primer parámetro es el número de parámetros que se pasarán al api y el tipo T es el valor de retorno del api. Luego los leo y los intento almacenar (como mejor se me ha ocurrido) así:

Código
template <class T>
T EncryptApi<T>::operator ()(int numArg, ...)
{
T retorno;
vector <void*> args;
va_list listaArg;
 
va_start(listaArg, numArg);
for (int n=0; n<numArg; n++)
{
args.push_back(va_arg(listaArg, void*));
}
 
retorno = MessageBoxA((HWND)args[0], (LPCSTR)args[1], (LPCSTR)args[2], (UINT)args[3]);
 
va_end(listaArg);
return retorno;
}
 

Ese trozo es solo una prueba de un caso particular evidentemente xD
Si se utiliza el código así tal cual funciona sin problemas, el problema es obtener el tipo de dato para hacer el casting, que no se me ocurre como..

Además necesitaría crearme un puntero a función para poder llamar al api y tampoco se me ocurre muy bien como, aunque bueno, siempre podré meter asm inline, pero sigue estando el problema de saber si lo que se pasa es un puntero o no

En fin, alguna idea?
En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: [C++] Método con número variable de argumentos de tipo desconocido
« Respuesta #3 en: 17 Abril 2009, 22:31 »

Usando un poco de assembly si ya tenes el nombre de la funcion y la DLL dond esta, yo haria algo asi (bosquejo):

GetModuleHandle/LoadLibrary
GetProcAddress
push paramX
push param2
push param1
call eax
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
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: [C++] Método con número variable de argumentos de tipo desconocido
« Respuesta #4 en: 19 Abril 2009, 01:57 »

Si, asm inline era mi segunda opción, me tira un poco para atrás que dependiendo del compilador el código pueda o no compilar, así que a lo mejor meto los opcodes en un array y listo, por que por más vueltas que le doy para hacerlo puramente en C++ no me surgen más que problemas al castear.

Muchas gracias ;)
En línea
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: [C++] Método con número variable de argumentos de tipo desconocido
« Respuesta #5 en: 19 Abril 2009, 09:14 »

De nandas  ::) La verdad es que al menos ahora no se me ocurre como podrias hacerlo en C++ puro, especialmente por el tema del typedef a la funcion, para poder llamar a la API.
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
Funciones con número arbitrario de argumentos [PHP]
PHP
madpitbull_99 3 1,183 Último mensaje 6 Marzo 2011, 22:31
por JungleBoogie
Denunciar llamada de Número Desconocido
Foro Libre
dimitrix 5 2,175 Último mensaje 29 Mayo 2011, 20:20
por Randomize
numero de telefono desconocido
Dispositivos Móviles (PDA's, Smartphones)
tuxes 2 2,063 Último mensaje 15 Junio 2011, 23:15
por tuxes
concatenar numero y variable
Desarrollo Web
kakashi20 1 683 Último mensaje 8 Noviembre 2011, 23:03
por madpitbull_99
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines