转自: http://blog.linuxeden.com/index.php/196616/viewspace-8082.html
$ make run
LD_LIBRARY_PATH=./ LD_PRELOAD=libleak.so ./mainmalloc 0x893b008, size 1
free 0x893b008
$ cat main.c
#include <stdlib.h>
int
main (int argc, char *argv[])
{
void *ptr;
ptr = malloc (1);
free (ptr);
exit (EXIT_SUCCESS);
}
$ cat leak.c
#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>
static void *(*real_malloc) (size_t size) = NULL;
static void (*real_free) (void *ptr) = NULL;
void *
malloc (size_t size)
{
void *addr;
if (!real_malloc) {
real_malloc = dlsym (RTLD_NEXT, "malloc");
}
addr = real_malloc (size);
printf ("malloc %p, size %d\n", addr, size);
return addr;
}
void
free (void *ptr)
{
if (!real_free) {
real_free = dlsym (RTLD_NEXT, "free");
}
printf ("free %p\n", ptr);
real_free (ptr);
}