#include <malloc.h>
void *(*__malloc_hook)(size_t size, const void *caller);
void *(*__realloc_hook)(void *ptr, size_t size, const void *caller);
void *(*__memalign_hook)(size_t alignment, size_t size, const void *caller);
void (*__free_hook)(void *ptr, const void *caller);
void (*__malloc_initialize_hook)(void);
void (*__after_morecore_hook)(void);
Переменная
__malloc_initialize_hook
указывает на функцию, вызываемую как только инициализируется
реализация malloc. Это слабая переменная, так как она может
быть переопределена в приложении через следующее:
void (*__malloc_initialize_hook)(void) = my_init_hook;
Четыре функции, на которые указывают __malloc_hook, __realloc_hook, __memalign_hook, __free_hook имеют прототипы, как функции malloc(), realloc(), memalign(), free(), соответственно, за исключением того, что у них есть последний аргумент caller, выдающий адрес вызывающего malloc().
Переменная __after_morecore_hook указывает на функцию, вызываемую каждый раз после запроса sbrk().
#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 *); /* Переопределение инициализирующих крюков из библиотеки C. */ 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; /* Рекурсивный вызов */ result = malloc (size); /* Сохраняет подчиненные крюки */ old_malloc_hook = __malloc_hook; /* `printf' должен вызывать `malloc', поэтому защищать и его. */ printf ("malloc(%u) called from %p returns %p, (unsigned int) size, caller, result); /* Восстанавливать наши старые крюки */ __malloc_hook = my_malloc_hook; return result; }
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |