Example #1
0
void *malloc(size_t size) {
    // Ces 2 variables sont déclarées, initialisées et utilisées dans tests.c
    // Afin de pouvoir y accéder, on y ajoute le mot-clé extern
    extern int nb_times_malloc_used;
    extern int let_malloc_fail;

    nb_times_malloc_used++; //On enregistre le nombre d'utilisations de malloc

    if (let_malloc_fail) //Si let_malloc_fail != 0, on impose que malloc échoue
        return NULL;

    // On déclare un pointeur vers une fonction qui a le même prototype
    void *(*original_malloc) (size_t size);
    // On crée une copie du pointeur vers la fonction malloc originale
    original_malloc = dlsym(RTLD_NEXT, "malloc");

    // On exécute la fonction malloc originale, car exécuter malloc(size)
    // reviendrait à faire un appel récursif infini ...
    void *ptr = original_malloc(size);

    if (ptr == NULL) // Dans le cas où malloc aurait réellement échoué
        return NULL;

    // On impose que le bloc mémoire n'ait pas déjà des valeurs nulles
    memset(ptr, 42, size);

    return ptr;
}
Example #2
0
void *malloc (size_t size){
	void *mem = original_malloc(size);
    if(fileo==1){
        locs[max]=mem;
        sizes[max]=size;
        max++;
    }
	return mem;
}
Example #3
0
void *my_malloc(const int size)
{
    void *ret;
    int siz;

    if (size <= 0)
        allocs_fatal("my_malloc size is <= 0");
    ret = original_malloc(size);
    if (!ret)
        allocs_fatal("malloc failed");
    bzero(ret, size);
    siz = malloc_usable_size(ret);
    if (size < siz)
        bzero(ret + size, siz - size);
#ifdef DEBUG
    register_atexit();
    RSTree_put_val(allocs_tree, (int)ret, siz);
    memop++;
#endif /* DEBUG */
    return ret;
}
Example #4
0
/* Interposed malloc which optionally calls another function.  */
void *
malloc (size_t size)
{
  interposed_malloc_called = true;
  static void *(*original_malloc) (size_t);

  if (original_malloc == NULL)
    {
      static bool in_initialization;
      if (in_initialization)
	{
	  const char *message
	    = "error: malloc called recursively during initialization\n";
	  (void) write (STDOUT_FILENO, message, strlen (message));
	  _exit (2);
	}
      in_initialization = true;

      original_malloc
	= (__typeof (original_malloc)) dlsym (RTLD_NEXT, "malloc");
      if (original_malloc == NULL)
	{
	  const char *message
	    = "error: dlsym for malloc failed\n";
	  (void) write (STDOUT_FILENO, message, strlen (message));
	  _exit (2);
	}
    }

  if (call_function)
    {
      call_function = false;
      call_func (DSO1, FUNC1);
      call_function = true;
    }
  return original_malloc (size);
}