29 bytes de código que se convierten en 16 GBs al compilar (compiler bomb)

Probablemente ya conozcáis las bombas zip, las bombas xml, etc., por decirlo de una manera sencilla, ficheros (relativamente) pequeños que producen una salida de enorme tamaño cuando son interpretados por el software nativo. El resultado, si se tiene mala leche, es provocar una auténtica denegación de servicio en la máquina que se ejecuta.


Hace unos meses en un foro de StackExchange lanzaron un reto para crear una de estas bombas abusando de un compilador. El ganador, el código más pequeño capaz de generar la salida mayor al compilarse.

Y bueno, un tal Digital Trauma presentó tan sólo 29 bytes de código C que al compilarse generar un ejecutable de... 17,179,875,837 bytes (16 GB)!:

main[-1u]={1};

Como veis, se define la función main como un array large (unsigned int con el valor 0xffffffff) y se inicializa en el primer elemento. Esto hará que GCC almacene el array entero en el ejecutable resultante. Debido a que el array es mayor de 2GBs al compilarlo tendremos que especificar el flag -mcmodel=medium. Así que si ejecutamos:

gcc -mcmodel=medium cbomb.c -o cbomb

Veréis como se satura rápidamente la CPU, la memoria y el disco... :-O


Fuente: Build a Compiler Bomb

4 comentarios :

  1. :_) https://pbs.twimg.com/media/Cu_1gfYWYAAKyqH.jpg

    ResponderEliminar
    Respuestas
    1. buenísimo el meme! lol!!
      me ha gustado tanto que lo he añadido al post.. muchas gracias ;)

      Eliminar
  2. para que sistema operativo o con que compilador realizamos este trabajo

    ResponderEliminar