C -> malloc -> dlsym - PullRequest
       18

C -> malloc -> dlsym

0 голосов
/ 31 марта 2011

Я использовал dlsym() для вызова моей версии malloc вместо библиотеки по умолчанию malloc:

 lt_malloc = (void*(*)(size_t))dlsym(RTLD_NEXT, "malloc");
 TRACE((stderr, "initialize: lt_malloc=%p\n", lt_malloc));
 if (!lt_malloc) {
     fprintf(stderr, "LeakTracer: could not resolve 'malloc' in 'libc.so': %s\n", dlerror());
     exit(1);
 }

Теперь, по прошествии определенного времени, может быть таймер или около того, я хочу вернуться к исходной версии malloc (библиотека libc malloc). Как я могу это сделать?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Вам лучше использовать dlopen в библиотеке, содержащей вашу функцию malloc, и использовать дескриптор dlopen в качестве первого аргумента для dlsym.

В качестве альтернативы, вы можете использовать LD_PRELOAD .

0 голосов
/ 31 марта 2011

Означает ли приведенный выше код 1) вы назвали свой malloc также malloc? 2) или что вы назначаете libc malloc для lt_malloc?

Приведенный выше код предполагает, что lt_malloc является malloc libc, поэтому «оригинальным» malloc. Ну, у вас, вероятно, есть какие-то макросы или функция

Итак, вы переключаетесь так же легко, как my_malloc = libc_malloc my_malloc = my_debug_malloc

и вы просто звоните my_malloc

Если это не поможет, пожалуйста, объясните опубликованный код и то, что вы ожидаете в "ente codde here"

...