1 /* Prototypes for __malloc_hook, __free_hook, __realloc_hook */
5 /* Prototypes for our hooks. */
6 static void my_init_hook (void);
7 static void *my_malloc_hook (size_t, const void *);
8 static void my_free_hook (void *, const void *);
9 static void *my_realloc_hook (void *, size_t, const void *);
11 /* Override initializing hook from the C library. */
12 void (*__malloc_initialize_hook) (void) = my_init_hook;
14 static void (*old_free_hook) __MALLOC_PMT ((void *__ptr,
15 __const __malloc_ptr_t));
16 static void *(*old_malloc_hook) __MALLOC_PMT ((size_t __size,
17 __const __malloc_ptr_t));
18 static void *(*old_realloc_hook) __MALLOC_PMT ((void *__ptr, size_t __size,
19 __const __malloc_ptr_t));
24 old_malloc_hook = __malloc_hook;
25 old_free_hook = __free_hook;
26 old_realloc_hook = __realloc_hook;
27 __malloc_hook = my_malloc_hook;
28 __free_hook = my_free_hook;
29 __realloc_hook = my_realloc_hook;
33 my_malloc_hook (size_t size, const void *caller)
36 /* Restore all old hooks */
37 __malloc_hook = old_malloc_hook;
38 __free_hook = old_free_hook;
39 __realloc_hook = old_realloc_hook;
40 /* Call recursively */
41 result = malloc (sizeof (size_t) + size);
44 *(size_t *) result = size;
45 result += sizeof (size_t);
46 memset (result, 0xF3, size);
48 /* Restore our own hooks */
49 __malloc_hook = my_malloc_hook;
50 __free_hook = my_free_hook;
51 __realloc_hook = my_realloc_hook;
56 my_free_hook (void *ptr, const void *caller)
58 /* Restore all old hooks */
59 __malloc_hook = old_malloc_hook;
60 __free_hook = old_free_hook;
61 __realloc_hook = old_realloc_hook;
64 ptr -= sizeof (size_t);
65 size_t size = *(size_t *) ptr;
67 memset (ptr, 0xD7, sizeof (size_t) + size);
69 /* Call recursively */
71 /* Restore our own hooks */
72 __malloc_hook = my_malloc_hook;
73 __free_hook = my_free_hook;
74 __realloc_hook = my_realloc_hook;
78 my_realloc_hook (void *ptr, size_t size, const void *caller)
83 /* Restore all old hooks */
84 __malloc_hook = old_malloc_hook;
85 __free_hook = old_free_hook;
86 __realloc_hook = old_realloc_hook;
89 ptr -= sizeof (size_t);
90 old_size = *(size_t *) ptr;
93 memset (ptr + sizeof (size_t) + size, 0x7D, old_size - size);
95 /* Call recursively */
96 result = realloc (ptr, (size != 0 ? sizeof (size_t) + size : 0));
99 *(size_t *) result = size;
100 result += sizeof (size_t);
102 memset (result + old_size, 0x3F, size - old_size);
104 /* Restore our own hooks */
105 __malloc_hook = my_malloc_hook;
106 __free_hook = my_free_hook;
107 __realloc_hook = my_realloc_hook;