0

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

提前致谢。

4

2 回答 2

0

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

或者,您可以使用 LD_PRELOAD

于 2011-06-10T16:00:54.660 回答
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 code here”的期望

于 2011-03-31T05:21:20.337 回答