Вызов функций в главном исполняемом файле из общего объекта - PullRequest
3 голосов
/ 01 ноября 2011

Мне нужно вызывать функции в главном исполняемом файле из общей библиотеки, загруженной LD_PRELOAD.

Исполняемый файл экспортирует все символы и содержит отладочную информацию.К сожалению, у меня нет доступа к его исходному коду.

В настоящее время я получаю неопределенные ошибки символов при попытке загрузить эту общую библиотеку.Есть ли способ сделать это?

PS: Целевой платформой является FreeBSD / x86.

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Можете ли вы создать указатель на функцию, выполнив typedef и используя 'dlsym ()', чтобы получить адрес символа. Затем вы можете вызвать функцию через указатель на функцию, как обычно вызов функции. Примечание: вам не нужен dlopen (), так как основной исполняемый файл с экспортированными символами загружается в адресное пространство процесса.

Прототип:

void *dlsym(void *handle, const char *symbol);

Предположим, что экспортируемая функция:

int foo(char *arg);

Указатель вашей функции:

typedef (int)(*fooPtr)(char *);

В вашем коде:

/* You can send NULL for first argument */
fooPtr fp = dlsym(NULL, "foo");
assert(0 != fp);
int ret = fp("hello world");
0 голосов
/ 01 ноября 2011
gcc -Wl,--export-dynamic

... должен сделать трюк.

Документация по --export-dynamic

...