0
点赞
收藏
分享

微信扫一扫

malloc 调用跟踪浅谈

诗远 2023-05-04 阅读 61


之前转载了一篇文章,关于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)


举报

相关推荐

0 条评论