Advertisement
rfmonk

hook_ex.c

Jul 23rd, 2014
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.60 KB | None | 0 0
  1. /* Prototypes for __malloc_hook, __free_hook */
  2. #include<malloc.h>
  3.  
  4. /* Prototypes for our hooks. */
  5. static void my_init_hook (void);
  6. static void *my_malloc_hook (size_t, const void *);
  7. static void my_free_hook (void*, const void *);
  8.  
  9. /* Override initializing hook from the C library. */
  10. void (*__malloc_initialize_hook) (void) = my_init_hook;
  11.  
  12. static void
  13. my_init_hook (void)
  14. {
  15.     old_malloc_hook = __malloc_hook;
  16.     old_free_hook = __free_hook;
  17.     __malloc_hook = my_malloc_hook;
  18.     __free_hook = my_free_hook;
  19. }
  20.  
  21. static void *
  22. my_malloc_hook (size_t size, const void *caller)
  23. {
  24.     void *result;
  25.     /* restore all the old hooks */
  26.     __malloc_hook = old_malloc_hook;
  27.     __free_hook = old_free_hook;
  28.     /* call recursively */
  29.     result = malloc (size);
  30.     /* save underlying hooks */
  31.     old_malloc_hook = __malloc_hook;
  32.     old_free_hook = __free_hook;
  33.     /* printf might call malloc, so protect it too. */
  34.     printf ("malloc (%u) returns %p\n", (unsigned int) size, result);
  35.     /* restore our own hooks */
  36.     __malloc_hook = my_malloc_hook;
  37.     __free_hook = my_free_hook;
  38.     return result;
  39. }
  40.  
  41. static void
  42. my_free_hook (void *ptr, const void *caller)
  43. {
  44.     /* Restore all old hooks */
  45.     __malloc_hook = old_malloc_hook;
  46.     __free_hook = old_free_hook;
  47.     /* Call recursively */
  48.     free (ptr);
  49.     /* Save underlying hooks */
  50.     old_malloc_hook = __malloc_hook;
  51.     old_free_hook = __free_hook;
  52.     /* printf might call free, so protect it too. */
  53.     printf ("freed pointer %p\n", ptr);
  54.     /* Restore our own hooks */
  55.     __malloc_hook = my_malloc_hook;
  56.     __free_hook = my_free_hook;
  57. }
  58.  
  59. main()
  60. {
  61.     ...
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement