重写系统函数,可用作内存统计、fd统计等
效果:例如malloc函数,实际调用的是__wrap_malloc,__wrap_malloc中调用真实的分配内存函数__real_malloc,如果调用成功就添加统计信息到数据结构中。
1.编译选项
CFLAGS_miniBP-y +=-funwind-tables
LDFLAGS_miniBP-y += -Wl,-wrap,malloc -Wl,-wrap,calloc -Wl,-wrap,realloc -Wl,-wrap,free
cmd_link_so_target = rm -f $@; $(CC) $(ld_flags) -o $@ -fPIC -shared -Wl,-Bsymbolic $(obj-y) -Wl,-wrap,malloc -Wl,-wrap,calloc -Wl,-wrap,realloc -Wl,-wrap,free
2.真系统函数声明
/* 实际内存申请释放函数申明 */
VOID *__real_malloc(size_t size);
VOID *__real_calloc(size_t nmemb, size_t size);
VOID *__real_realloc(VOID *ptr, size_t size);
VOID __real_free(VOID *ptr);
3.重写系统函数(可通过backtrace函数回溯调用堆栈)
4.代码中调用函数,直接调用malloc即可
5.打印结果,比较结果,就可以看出来内存是否有变化