【转载】__wrap_malloc动态替换malloc函数

调试过程中经过会遇到各种各样的内存问题,内存泄漏、重复释放、内存溢出等,当然技术手段也有很多总,比如mtrace、Valgrind等,但是GUN链接器实际提供了一个好用的方法

--wrap=symbol

函数名定义为__wrap_symbol ,symbol也是一个函数,那么编译的时候如果添加了链接参数,函数调用symbol时,会调用到__wrap_symbol函数,另外还有一个相关函数__real_symbol,只声明不定义的时候,会对其调用到真正的symbol函数。

举一个简单的例子:

 

  1. //test.c
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. void* __real_malloc(size_t size); // 只声明不定义
  5. void* __wrap_malloc(size_t size)
  6. {
  7. printf("__wrap_malloc called\n");
  8. return __real_malloc(size); //调用真正的malloc
  9. }
  10. int void(void)
  11. {
  12. void *mem=malloc(16);
  13. memset(mem, 0, 16);
  14. free(mem);
  15. return 0;
  16. }

编译命令

gcc -Wl,--wrap,malloc -o malloc_test tect.c

#:./test malloc_test

__wrap_malloc called

 

 

posted on 2020-04-15 15:48  Peiah  阅读(541)  评论(0)    收藏  举报