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 C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con dlopen().
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con dlopen().  (Leído 2,165 veces)
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Problema con dlopen().
« en: 4 Septiembre 2012, 21:38 pm »

Hola!

Estoy tratando de cargar librerias dinamicas (.so en linux) dinamicamente, valga la redundancia xD. El problema es que he creado una simple libreria dinamica, con tres funciones estupidas (las que me hacia por defecto el C::B) y la funcion dlopen() siempre retorna NULL.

Código
  1. #include <dlfcn.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. typedef int (*function)(int, int);
  7. void* handle = dlopen("libtest.so", RTLD_LAZY);
  8. if(!handle){ printf("dlopen"); return 1; }
  9. function fnc = (function) dlsym(handle, "SampleAddInt");
  10. fnc();
  11. dlclose(handle);
  12. return 0;
  13. }
  14.  

El archivo libtest.so esta en la misma carpeta que el ejecutable, y tampoco funciona si le pongo la ruta completa. Por supuesto la salida de la consola siempre es "dlopen".

¿Que puede estar pasando? ¿Porque dlopen() siempre falla?

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema con dlopen().
« Respuesta #1 en: 4 Septiembre 2012, 23:52 pm »

Prueba con esto que he encontrado aquí --> http://stackoverflow.com/questions/8193640/dlopen-search-path

If you want to ensure that a specific library is dlopen-ed, pass a path to dlopen, e.g. dlopen("/some/path/to/lib.so", RTLD_LOCAL) or maybe dlopen("./lib.so", RTLD_LOCAL) but not dlopen("lib.so", RTLD_LOCAL).
Prueba con este , ya puedes imaginar lo que he cambiado:
Código
  1. #include <dlfcn.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. typedef int (*function)(int, int);
  7. void* handle = dlopen("./libtest.so", RTLD_LAZY);
  8. if(!handle){ printf("dlopen"); return 1; }
  9. function fnc = (function) dlsym(handle, "SampleAddInt");
  10. fnc();
  11. dlclose(handle);
  12. return 0;
  13. }


En línea

Regístrate en
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Problema con dlopen().
« Respuesta #2 en: 5 Septiembre 2012, 14:00 pm »

Gracias por la respuesta! Que raro, creia haber leido todos los temas de stack overflow que tenian que ver con esto  :¬¬. Ha funcionado asi y con la ruta completa.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema con dlopen().
« Respuesta #3 en: 5 Septiembre 2012, 18:45 pm »

Gracias por la respuesta! Que raro, creia haber leido todos los temas de stack overflow que tenian que ver con esto  :¬¬. Ha funcionado asi y con la ruta completa.

Saludos.
Jajajaja bueno , a uno se le pasa cualquier cosa  :silbar:

¡Un saludo!
En línea

Regístrate en
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Problema con dlopen().
« Respuesta #4 en: 5 Septiembre 2012, 22:14 pm »

Estoooo, vale leer la manpage de dlopen() ... el tema de cómo se maneja el path para buscar la librería, está explicado ahí
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Problema con dlopen().
« Respuesta #5 en: 5 Septiembre 2012, 22:34 pm »

Estoooo, vale leer la manpage de dlopen() ... el tema de cómo se maneja el path para buscar la librería, está explicado ahí


Yo no lo encontre, solo he visto esto:

Cita de: manpage dlopen()
#include <dlfcn.h>

void *dlopen(const char *file, int mode);
The file argument is used to construct a pathname to the object file. If file contains a slash character, the file argument is used as the pathname for the file. Otherwise, file is used in an implementation-defined manner to yield a pathname.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema BlueZScanner y problema de conexión
Hacking Mobile
Kasswed 3 6,352 Último mensaje 6 Mayo 2006, 22:04 pm
por Gospel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines