2011-03-31 33 views
0

我已经使用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)。我怎样才能做到这一点?

在此先感谢。

回答

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”

+0

@Friedrich:请参考dlsym的手册页,尤其是使用宏RTLD_NEXT。是的,我们有我们自己的malloc代码,在将被调用的程序中。 – kingsmasher1 2011-03-31 05:38:27

+0

我知道dlsym做什么,所以lt_malloc是libc malloc。那么你的malloc在哪里呢?什么是名称以及如何通过宏或其他函数指针调用它,或者如何调用它? – Friedrich 2011-03-31 06:06:50

+0

不,我认为在这种情况下,您需要更好地了解宏RTLD_NEXT。我将在这里复制粘贴从手册页中的一个例外:'有两个特殊的伪句柄,RTLD_DEFAULT和RTLD_NEXT。前者将使用默认库搜索顺序查找所需符号的第一个匹配项。后者将在当前库之后的搜索顺序中查找下一个函数。这允许在另一个共享库中的函数周围提供一个包装。' – kingsmasher1 2011-03-31 06:09:45

0

您应该对包含malloc函数的库使用dlopen,并使用dlopen的句柄作为dlsym的第一个参数。您也可以use LD_PRELOAD