C 使用dlsym清除功能插入

C 使用dlsym清除功能插入,c,valgrind,dlsym,resource-cleanup,library-interposition,C,Valgrind,Dlsym,Resource Cleanup,Library Interposition,作为malloc包装器,我使用以下经典代码片段: #define _GNU_SOURCE #include <stdio.h> #include <stdint.h> #include <dlfcn.h> void* malloc(size_t size) { static void* (*real_malloc)(size_t) = NULL; if (!real_malloc) real_malloc = dlsym(RT

作为malloc包装器,我使用以下经典代码片段:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdint.h>
#include <dlfcn.h>

void* malloc(size_t size)
{
    static void* (*real_malloc)(size_t) = NULL;
    if (!real_malloc)
        real_malloc = dlsym(RTLD_NEXT, "malloc");

    void *p = real_malloc(size);
    fprintf(stderr, "malloc(%d) = %p\n", size, p);
    return p;
}
我如何释放这些资源? 谢谢

1个街区仍然可以到达

这些街区很好。你不必担心它们,它们不是漏洞。这里没什么可看的,走吧


您应该关心的是“肯定丢失了”。

也许我在这里遗漏了什么,我不知道是否有可能释放此缓冲区,但我会忽略它。dlsym缓冲区将在程序退出时释放,只要程序运行,您就需要它。这也不会困扰我,我只是好奇。好的。你打电话给我吗?这个缓冲区还保留着吗?我这样做了,但是我只得到了一个断言失败
不一致,这是由ld检测到的。so:dl-close.c:719:_-dl\u-close:assertion
map->l\u init\u称为“失败!”`
==32691== 32 bytes in 1 blocks are still reachable in loss record 1 of 1
==32691==    at 0x4C279FC: calloc (vg_replace_malloc.c:467)
==32691==    by 0x528559F: _dlerror_run (dlerror.c:142)
==32691==    by 0x5285099: dlsym (dlsym.c:71)
==32691==    by 0x4060BC: malloc (memory.c:222)