之前转载了一篇文章,关于memory leak的检出。
这里面使用的方法需要去修改源代码,这是最大的问题。
不修改源代码的方式,可以是实现一个库,这个库里实现了 malloc / free 的 wrapper,在 malloc / free 里对分配的信息
进行统计后,再去调用 libc 里的真正的实现。
参考:
#define _GNU_SOURCE
#include <dlfcn.h>
#include <stdio.h>
static void *(*lt_malloc) (size_t size);
__attribute__ ((constructor))
static void init_mem_func (void)
{
lt_malloc = (void *(*)(size_t))dlsym(RTLD_NEXT, "malloc");
}
void *malloc(size_t size)
{
void *ptr;
ptr = lt_malloc(size);
printf("malloc size(%d) at (%p)\n", size, ptr);
return ptr;
}
编译如下:
gcc -o libmalloc.so malloc.c -ldl -fPIC -shared
测试示例:
LD_PRELOAD=./libmalloc.so /tmp/test
malloc size(1) at (0x7d2010)
malloc size(2) at (0x7d2010)
malloc size(3) at (0x7d2010)
malloc size(4) at (0x7d2010)
malloc size(5) at (0x7d2030)