The GNU C library reference guide has an example program (p. 65), but I don’t know what the three sentences are:
__malloc_hook = old_malloc_hook;
old_malloc_hook = __malloc_hook;
__malloc_hook = my_malloc_hook;
I mean. Especially the second, who can explain to me? thanks.
static void *
my_malloc_hook (size_t size, const void *caller)
{
void *result;
__malloc_hook = old_malloc_hook;
__free_hook = old_free_hook;
result = malloc (size);
old_malloc_hook = __malloc_hook;
old_free_hook = __free_hook;
printf ("malloc (%u) returns %p\n", (unsigned int) size, result);
__malloc_hook = my_malloc_hook;
__free_hook = my_free_hook;
return result;
}
I am writing a small program to test it:
#include <stdio.h>
#include <malloc.h>
static void my_init_hook(void);
static void *my_malloc_hook(size_t, const void *);
static void *(*old_malloc_hook) (size_t, const void *);
void (*__malloc_initialize_hook) (void) = my_init_hook;
static void my_init_hook(void)
{
old_malloc_hook = __malloc_hook;
__malloc_hook = my_malloc_hook;
}
static void *my_malloc_hook(size_t size, const void *caller)
{
void *result;
__malloc_hook = old_malloc_hook;
printf("1: __malloc_hook = %x old_malloc_hook = %x\n", __malloc_hook, old_malloc_hook);
result = malloc(size);
printf("2: __malloc_hook = %x old_malloc_hook = %x\n", __malloc_hook, old_malloc_hook);
old_malloc_hook = __malloc_hook;
printf("3: __malloc_hook = %x old_malloc_hook = %x\n", __malloc_hook, old_malloc_hook);
printf("malloc(%u) called from %p returns %p\n",
(unsigned int)size, caller, result);
__malloc_hook = my_malloc_hook;
printf("4: __malloc_hook = %x old_malloc_hook = %x\n", __malloc_hook, old_malloc_hook);
return result;
}
int main(void)
{
char *p;
p = malloc(10);
free(p);
return 0;
}
program result:
1: __malloc_hook = 0 old_malloc_hook = 0
2: __malloc_hook = 0 old_malloc_hook = 0
3: __malloc_hook = 0 old_malloc_hook = 0
malloc(10) called from 0xb7797f38 returns 0x932c008
4: __malloc_hook = 804849d old_malloc_hook = 0
but now I have more problems, why is old_malloc_hookeverything 0, at 1,2,3, why __malloc_hookare 0 equal? I'm really confused. Help me.