C - > malloc - >对dlsym

时间:2011-03-31 05:12:59

标签: c malloc dlsym

我使用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 :(得分:0)

以上代码是否意味着什么? 1)你已经调用了你的malloc也是malloc? 2)或者您将libc malloc分配给lt_malloc?

上面的代码表明lt_malloc是libc malloc所以是“原始”的malloc。嗯,你可能有一些宏或功能

那么你就像转换一样容易    my_malloc = libc_malloc    my_malloc = my_debug_malloc

你只需要调用my_malloc

如果这没有帮助,请解释发布的代码以及您对“ente codde here”的期望

答案 1 :(得分:0)

你应该在包含malloc函数的库上使用dlopen,并使用dlopen的句柄作为dlsym的第一个参数。

或者,您可以use LD_PRELOAD