Last active
August 1, 2018 13:42
-
-
Save FdelMazo/2d22aead6acc46df35a53c331d6272be to your computer and use it in GitHub Desktop.
Emulador de falsos mallocs. Un wrapper para poder variar entre un malloc normal y uno que devuelva solo NULL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "fake_malloc.h" | |
bool trucho = false; | |
int MALLOC_TRUCHO(void) { return trucho; } | |
void *malloc(size_t size) { | |
if (MALLOC_TRUCHO()) return NULL; | |
static void * (*func)(); | |
if(!func) func = (void *(*)()) dlsym(RTLD_NEXT, "malloc"); | |
return(func(size)); | |
} | |
void usar_malloc_trucho() {trucho = true;} | |
void usar_malloc_original() {trucho = false;} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Snippet para poder variar entre el uso normal de malloc y un malloc que solo devuelva nulo (emulando que fallo el pedir memoria) | |
// Compilar sin flag -pedantic y con flag -ldl después de especificar los archivos .c | |
// No funciona si se compila por separado con objetos. Todo archivo que quiera usar el malloc trucho va a tener que ser compilado junto a fake_malloc.c | |
// Al usar valgrind no se pueden overridear funciones de la libreria, asi que dara perdida de memoria | |
// Ejemplo: gcc fake_malloc.c main.c -ldl | |
// Utilizacion: | |
// Hacer include de fake_malloc.h | |
// Para activar el malloc 'trucho', invocar la funcion usar_malloc_trucho(). Todo malloc usado despues de esta funcion devolvera NULL | |
// Luego, revertir con usar_malloc_original() para dejar todo como estaba. El malloc utilizado luego de esto será el original | |
#ifndef FAKE_MALLOC_H | |
#define FAKE_MALLOC_H | |
#define _GNU_SOURCE | |
#include <stdbool.h> | |
#include <dlfcn.h> | |
#include <stdlib.h> | |
void usar_malloc_trucho(); | |
void usar_malloc_original(); | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// gcc fake_malloc.c main_ejemplo.c -ldl | |
// ./a.out | |
#include "fake_malloc.h" | |
#include <stdio.h> | |
#include <stdlib.h> | |
int main (){ | |
void* puntero_real = malloc(10); | |
usar_malloc_trucho(); // 'Activo' el trucho malloc | |
void* puntero_falso = malloc(10); | |
usar_malloc_original(); // 'Desactivo', para utilizar el malloc normal en el resto del archivo | |
printf("Puntero real apunta a memoria dinámica: %s \n", puntero_real ? "OK" : "ERROR"); | |
printf("Puntero falso apunta a NULL: %s \n", !puntero_falso ? "OK" : "ERROR"); | |
free(puntero_real); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment