Alejandro Vargas
2010-08-06 08:55:15 UTC
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?
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?