Discussion:
carga de secciones de un shared object
Alejandro Vargas
2010-08-06 08:55:15 UTC
Permalink
He estado investigando sobre los shared objects.

La función dlsym permite cargar dinámicamente funciones de un shared
object. El ejemplo que viene en el man es así:

              #include <dlfcn.h>

              int main(int argc, char **argv) {
                  void *manejador = dlopen ("/lib/libm.so", RTLD_LAZY);
                  double (*cosine)(double) = dlsym(manejador, "cos");
                  printf ("%f\n", (*cosine)(2.0));
                  dlclose(manejador);
              }


Bien, lo que yo quisiera ver es cómo cargar no una función sino una
sección de datos contenida en un .so. Con objdump -t puedo listar e
incluso ver la ubicación y longitud de un bloque de datos. Me gustaría
hacer eso con un programa mio pero al parecer el dlsym no me carga
eso. Será que el dlsym sólo carga cosas que estén en el .text? El dato
que yo busco está en .rodata. y cuando intento cargarlo con dlsym me
da un error de "undefined symbol: xxxx"

Hay alguna función diferente para esto?
Luis German Revilla Amezquita
2010-08-06 15:18:52 UTC
Permalink
Hola

En el manual " man dlsym " indica como se debe de tratar el problema de
las referencias externas para usar el cargador de enlace dinamico.

Saludos
http://linuxprogramacion.blogspot.com
Post by Alejandro Vargas
He estado investigando sobre los shared objects.
La función dlsym permite cargar dinámicamente funciones de un shared
#include <dlfcn.h>
int main(int argc, char **argv) {
void *manejador = dlopen ("/lib/libm.so", RTLD_LAZY);
double (*cosine)(double) = dlsym(manejador, "cos");
printf ("%f\n", (*cosine)(2.0));
dlclose(manejador);
}
Bien, lo que yo quisiera ver es cómo cargar no una función sino una
sección de datos contenida en un .so. Con objdump -t puedo listar e
incluso ver la ubicación y longitud de un bloque de datos. Me gustaría
hacer eso con un programa mio pero al parecer el dlsym no me carga
eso. Será que el dlsym sólo carga cosas que estén en el .text? El dato
que yo busco está en .rodata. y cuando intento cargarlo con dlsym me
da un error de "undefined symbol: xxxx"
Hay alguna función diferente para esto?
Alejandro Vargas
2010-08-10 07:16:02 UTC
Permalink
El día 6 de agosto de 2010 17:18, Luis German Revilla Amezquita
Hola
En el manual  " man dlsym " indica como se debe de tratar el problema de
las referencias externas para usar el cargador de enlace dinamico.
Sí, bueno, dlsym sólo permite cargar funciones, no datos. De todas
maneras me las arreglé para hacer mi propio parser de archivos elf. Si
a alguien le hace falta, ya lo tengo.

Loading...