shiftdot515

Mar 30 19:01:02

Apr 12th, 2020
434
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <signal.h>
  3. #include <dlfcn.h>
  4.  
  5. /* compile this object, Link w/ it before libc or smartheap */
  6. #define BREAK()  (kill(getpid(), SIGTRAP))
  7.  
  8. void * malloc(size_t size);
  9. void  free(void * ptr);
  10. void  * calloc(size_t num_objs, size_t size);
  11. void  * realloc(void * ptr, size_t new_size);
  12.  
  13. long malloc_count=0;
  14. long free_count=0;
  15. long free_null_ptr_count=0;
  16. long calloc_count=0;
  17. long realloc_count=0;
  18. long mallocvfree_count=0;
  19. long malloc_total_bytes=0;
  20.  
  21.  
  22. void *malloc(size_t size)
  23. {
  24.   static void *( *malloc_ptr) (size_t) = NULL;
  25.  
  26.   void * ptr;
  27.   if ( malloc_ptr == NULL ) {
  28.     malloc_ptr=dlsym(RTLD_NEXT,"malloc");
  29.     if ( malloc_ptr == NULL )
  30.       BREAK();
  31.   }
  32.   ptr=(*malloc_ptr)(size);
  33.   /* stats */
  34.   malloc_count++;
  35.   mallocvfree_count++;
  36.   malloc_total_bytes+=size;
  37.  
  38.   return ptr;
  39. }
  40.      
  41. void free(void * ptr)
  42. {
  43.   static void *( *free_ptr) (void *) = NULL;
  44.  
  45.   if ( free_ptr == NULL ) {
  46.     free_ptr=dlsym(RTLD_NEXT,"free");
  47.     if ( free_ptr==NULL )
  48.       BREAK();
  49.   }
  50.   (*free_ptr)(ptr);
  51.  
  52.   /*stats */
  53.   if ( ptr == NULL )
  54.     free_null_ptr_count++;
  55.   else {
  56.     free_count++;
  57.     mallocvfree_count--;
  58.   }
  59.  
  60. }
  61.      
  62. void  * calloc(size_t num_objs, size_t size)
  63. {
  64.   static void * (* calloc_ptr) ( size_t, size_t) = NULL;
  65.   void * ptr;
  66.  
  67.   if ( calloc_ptr == NULL ) {
  68.     calloc_ptr=dlsym(RTLD_NEXT,"calloc");
  69.     if ( calloc_ptr == NULL )
  70.       BREAK();
  71.   }
  72.   ptr=(*calloc_ptr)(num_objs,size);
  73.   /* stats */
  74.   calloc_count++;
  75.   malloc_total_bytes+=size;
  76.  
  77.   return ptr;
  78. }
  79.  
  80. void  * realloc(void * ptr, size_t new_size)
  81. {
  82.   static void * (* realloc_ptr) ( void *, size_t) = NULL;
  83.   void * new_ptr;
  84.  
  85.   if ( realloc_ptr == NULL ) {
  86.     realloc_ptr=dlsym(RTLD_NEXT,"realloc");
  87.     if ( realloc_ptr == NULL )
  88.       BREAK();
  89.   }
  90.   new_ptr=(*realloc_ptr)(ptr,new_size);
  91.   /* stats */
  92.   realloc_count++;
  93.   return new_ptr;
  94. }
Add Comment
Please, Sign In to add comment