Страниц: [1]
  Печать  
Автор Тема: Как сделать обёртку над malloc?  (Прочитано 4698 раз)
oder
Гость
« : Июня 28, 2011, 07:32:23 pm »

Привет

Интересует сделать обёртку над malloc/realloc/free (в мирных целях, если кому интересно). Для этого вычитал об LD_PRELOAD, сделал свою .so библиотеку, которая экспортирует функции, в реализации делаю dlopen("/lib/libc.so.2", RTLD_GLOBAL | RTLD_WORLD | RTLD_GROUP) и беру адрес соответствующего оригинала, чтоб перевызвать (всё сделано культурно, оптимально, тридсейфно). Имхо, как-то должно быть можно и без dlopen, но точно не знаю как.
При запуске вызывает мою функцию (поймал лишь с помощью raise(SIGSTOP)), а потом жутко крешит по SIGSEGV. Кол-стек не показывается нормально. add-symbol в gdb не помогает. Если верить адресам, откуда-то из libc приходит.
Вопрос1: должно ли оно так работать?
Вопрос2: как делать, чтоб работало?
Записан
dmi
QOR.Admin
*****
Offline Offline

Сообщений: 469



Просмотр профиля
« Ответ #1 : Июня 28, 2011, 11:09:36 pm »

g_malloc использует такую же механику, может там есть подсказки?
А то не видя кода и use-case сложно гадать.

Кстати, а можно ли делать dlopen() той же библиотеки, которой вы и так уже пользуетесь в данный момент?
Или у вас в линкере -nostdlib?
« Последнее редактирование: Июня 28, 2011, 11:11:12 pm от dmi » Записан
oder
Гость
« Ответ #2 : Июня 29, 2011, 07:20:11 pm »

g_malloc использует такую же механику, может там есть подсказки?
А то не видя кода и use-case сложно гадать.

Кстати, а можно ли делать dlopen() той же библиотеки, которой вы и так уже пользуетесь в данный момент?
Или у вас в линкере -nostdlib?

Вот именно dlopen и не хочет работать. При чём, перепробовал всякие варианты параметров - ничего не помогает.
Ладно, обошел тем, что под 6.5.0 уже есть dlsym(RTDL_NEXT, ...). А под 6.3.0 мне оно не обязательно.
Записан
Страниц: [1]
  Печать  
 
Перейти в: