mem.h
- #ifndef __MEM_H__
- #define __MEM_H__
- #include <malloc.h>
- #include <stdio.h>
- static void *(*old_malloc_hook)(size_t, const void*);
- static void *(*old_realloc_hook)(void *ptr, size_t size, const void *caller);
- static void (*old_free_hook)(void *, const void*);
- static inline void *mem_malloc_hook(size_t size, const void *caller)
- {
- void *result;
- __malloc_hook = old_malloc_hook;
- result = malloc(size);
- old_malloc_hook = __malloc_hook;
- __malloc_hook = mem_malloc_hook;
- printf("[malloc] size : [%u] at : [%p] caller : %p\n", (unsigned int)size, result, caller);
- return result;
- }
- static inline void *mem_realloc_hook(void *ptr, size_t size, const void *caller)
- {
- void *result;
- __realloc_hook = old_realloc_hook;
- result = realloc(ptr, size);
- old_realloc_hook = __realloc_hook;
- printf("[realloc] size : [%u] at : [%p] caller : %p\n", (unsigned int)size, result, caller);
- __realloc_hook = mem_realloc_hook;
- return result;
- }
- static inline void mem_free_hook(void *ptr, const void *caller)
- {
- __free_hook = old_free_hook;
- free(ptr);
- old_free_hook = __free_hook;
- printf("[free] at : [%p] caller : %p\n", ptr, caller);
- __free_hook = mem_free_hook;
- }
- static inline void init_mem_hook(void)
- {
- old_malloc_hook = __malloc_hook;
- old_realloc_hook = __realloc_hook;
- old_free_hook = __free_hook;
- __realloc_hook = mem_realloc_hook;
- __malloc_hook = mem_malloc_hook;
- __free_hook = mem_free_hook;
- }
- #endif
#ifndef __MEM_H__
#define __MEM_H__
#include <malloc.h>
#include <stdio.h>
static void *(*old_malloc_hook)(size_t, const void*);
static void *(*old_realloc_hook)(void *ptr, size_t size, const void *caller);
static void (*old_free_hook)(void *, const void*);
static inline void *mem_malloc_hook(size_t size, const void *caller)
{
void *result;
__malloc_hook = old_malloc_hook;
result = malloc(size);
old_malloc_hook = __malloc_hook;
__malloc_hook = mem_malloc_hook;
printf("[malloc] size : [%u] at : [%p] caller : %p\n", (unsigned int)size, result, caller);
return result;
}
static inline void *mem_realloc_hook(void *ptr, size_t size, const void *caller)
{
void *result;
__realloc_hook = old_realloc_hook;
result = realloc(ptr, size);
old_realloc_hook = __realloc_hook;
printf("[realloc] size : [%u] at : [%p] caller : %p\n", (unsigned int)size, result, caller);
__realloc_hook = mem_realloc_hook;
return result;
}
static inline void mem_free_hook(void *ptr, const void *caller)
{
__free_hook = old_free_hook;
free(ptr);
old_free_hook = __free_hook;
printf("[free] at : [%p] caller : %p\n", ptr, caller);
__free_hook = mem_free_hook;
}
static inline void init_mem_hook(void)
{
old_malloc_hook = __malloc_hook;
old_realloc_hook = __realloc_hook;
old_free_hook = __free_hook;
__realloc_hook = mem_realloc_hook;
__malloc_hook = mem_malloc_hook;
__free_hook = mem_free_hook;
}
#endif
main.c
- #include "mem.h"
- void (*__malloc_initialize_hook) (void) = init_mem_hook;
- int main(int argc, char **argv)
- {
- char *ptr = malloc(1024);
- ptr = realloc(ptr, 2048);
- free(ptr);
- return 0;
- }