I am trying to override malloc by doing this.
#define malloc(X) my_malloc((X))
void* my_malloc(size_t size)
{
void *p = malloc(size);
printf (\"All
With Glibc, there exists malloc_hook(3) as the proper way to globally interpose your own malloc function.
#include
#include
static void *(*old_malloc_hook)(size_t, const void *);
static void *new_malloc_hook(size_t size, const void *caller) {
void *mem;
__malloc_hook = old_malloc_hook;
mem = malloc(size);
fprintf(stderr, "%p: malloc(%zu) = %p\n", caller, size, mem);
__malloc_hook = new_malloc_hook;
return mem;
}
static void init_my_hooks(void) {
old_malloc_hook = __malloc_hook;
__malloc_hook = new_malloc_hook;
}
void (*__malloc_initialize_hook)(void) = init_my_hooks;
$ cat >mem.c <<'EOF' (the code above) EOF $ cat >main.c <<'EOF' #include#include int main() { char *buf = malloc(50); sprintf(buf, "Hello, world!"); puts(buf); free(buf); return 0; } EOF $ cc mem.c main.c $ ./a.out 0x40077e: malloc(50) = 0x22f7010 Hello, world!
(We could use __attribute__((constructor)), but that trick isn't necessary: Glibc handily provides __malloc_initialize_hook as another way to load run code before main.)