我已经使用dlsym()
调用我的版本的malloc,而不是默认的库的malloc:Ç - >的malloc - >对dlsym
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)。我怎样才能做到这一点?
在此先感谢。
@Friedrich:请参考dlsym的手册页,尤其是使用宏RTLD_NEXT。是的,我们有我们自己的malloc代码,在将被调用的程序中。 – kingsmasher1 2011-03-31 05:38:27
我知道dlsym做什么,所以lt_malloc是libc malloc。那么你的malloc在哪里呢?什么是名称以及如何通过宏或其他函数指针调用它,或者如何调用它? – Friedrich 2011-03-31 06:06:50
不,我认为在这种情况下,您需要更好地了解宏RTLD_NEXT。我将在这里复制粘贴从手册页中的一个例外:'有两个特殊的伪句柄,RTLD_DEFAULT和RTLD_NEXT。前者将使用默认库搜索顺序查找所需符号的第一个匹配项。后者将在当前库之后的搜索顺序中查找下一个函数。这允许在另一个共享库中的函数周围提供一个包装。' – kingsmasher1 2011-03-31 06:09:45