使用gcc
和GNU linker
,您可以轻松包装malloc
#include <stdlib.h>
#include <stdio.h>
void* __real_malloc(size_t sz);
void* __wrap_malloc(size_t sz)
{
void *ptr;
ptr = __real_malloc(sz);
fprintf(stderr, "malloc of size %d yields pointer %p\n", sz, ptr);
/* if you wish to save the pointer and the size to a data structure,
then remember to add wrap code for calloc, realloc and free */
return ptr;
}
int main()
{
char *x;
x = malloc(103);
return 0;
}
并编译
gcc a.c -o a -Wall -Werror -Wl,--wrap=malloc
(当然,这也适用于用 g++ 编译的 c++ 代码,如果你愿意的话,也可以使用 new 运算符(通过它的错位名称)。)
实际上,静态/动态加载的库也将使用您的__wrap_malloc
.