Hace 7 años | Por mr_b a hackplayers.com
Publicado hace 7 años por mr_b a hackplayers.com

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.

Comentarios

rcorp

#16 jajjajaj@rafaojosverdes ha convertido esto en un Pregúntame de tipo: Soy informático, respondo preguntas
(pero su pregunta no tiene sentido, porque me parece que todos los informáticos somos vírgenes, no?)

Heimish

#21 ¿No todos lo somos?

D

#14 Pues no sé si el chaval es virgen o no, pero yo soy informático y ha habido épocas en mi vida que tenía la polla envuelta en paños calientes de tanto follar (y sin pagar).

Que pasa ¿que una cosa es incompatible con la otra?

Es decir: ¿No puedes ser virtuoso en tu trabajo y el fin de semana dedicarte a follar con todas las chicas que puedas?

#16

fcruz

#29 Este se quedó en los 80.

stygyan

#29 yo siempre he dicho que la gente no hetero somos menos aceptados en el mundo de IT porque follamos más y tal. Pero en plan coña, ojo. lol

Mister_Lala

No digo que no sea algo ingenioso, pero asignar memoria estáticamente no tiene mucho mérito. No pasa de mera curiosidad.

a

#5 la gracia es hacerlo sobre main y no dentro de main.

r

#11 y no usar 0xffffffff, max_int o similares

a

#12 bueno, usar -1 en unsigned es muy habitual en programación en c por que es independientemde la arquitectura (8, 16, 32 o 64 bits) y mas portable que max_int.

a

#17 Al contrario, estas suponiendo que la máquina destino implementa los negativos en complemento a 2.

Suele ser lo habitual, pero nadie te lo garantiza.

Heimish

#24 #23 ¿Lo puedes volver a explicar? Es que con dos veces no me ha quedado claro

a

#30 La primera vez me dio un error y tuve que escribir el mensaje de nuevo :o

D

#39 Tiene gracia. Casi me peta el PC de la risa lol
Disclaimer. Me he pasado el finde con el UNK6 de pokemon (Superfriki)

a

#17 Al contrario, estas suponiendo que la máquina destino implementa los negativos en complemento a 2, cuando no es necesariamente cierto.

rcorp

#17 la prueba era generar el MAYOR número de bytes con el MÍNIMO de bytes de código
muy currado, bien por el tío este

angelitoMagno

#14 ¿Eres tonto?

porcorosso

#26 ¿Tu también eres virgen?

angelitoMagno

#35 ¿Tu también eres tonto?

pedrobz

Bah, a mi no me sorprende. Cualquier programador Java ya esta acostumbrado a que cualquier cosa mas compleja que el Hola Mundo le ocupe gigas de espacio en memoria...

pawer13

#18 hombre, si por "cualquier cosa" te refieres a un contenedor j2ee con un EAR con unas pocas miles de clases, pues sí.

pedrobz

#40 O una simple calculadora en un ejecutable, que el instalador que te crea por defecto la jdk 8 ocupa 150mb, y eso que solo es una triste ventana de javaFX sin imágenes...

pawer13

#41 Si quieres ejecutarlo sin instalar el JRE pues es normal, sobre todo si usas JFX que es una librería que no venía en las versiones anteriores, pero si asumes que vas a tenerlo en la máquina el JAR generado son unos pocos KB

elzahr

#18 Ese es el nivel. Se atreve a criticar a Java alguien que no sabe diferenciar entre espacio de memoria y espacio de compilado.. anda ya..

pedrobz

#42 Los distingo perfectamente, solo aprovecho la fama que tiene Java de tragamemoria para meter un chiste con calzador.

ur_quan_master

Bah.... Usando cualquier librería de la boost te peta el compilador igual y el executable queda tan grande o más.

j

#3 Con 29 bytes de Boost no has acabado ni el primer #ifdef

c

Yo solo cuento 16 bytes de código...

D

#15 cierto.

0xffffffff tampoco es 500000, como dice el artículo.

pawer13

#15 más 13 de parámetros en la línea de comandos al compilar.

Marinmenyo

#15 Los flags usados al compilar tmb cuentan

S

No os basta con el propio Windows como ejemplo de compilado enorme con no demasiado sentido?

f

//byte byte disk
1 shell "mkdir a"
2 shell "cd a"
3 goto 1

valla me paso de 29 bytes ... me quito el sombrero ...

f

#20 lo usaba para cargarme los disquetes powerbasic y hay que compilar para ejecutarse

r

A mi me da un error "/usr/bin/ld: final link failed: Memory exhausted"

r

Acabo de probarlo y funciona perfectamente. No he tenido que usar ningún flag a mayores. Menudo crack!

D

No acabo de entender que significa -1u

¿Infinito unsigned?

D

#2 sep, eso es. Es una forma abreviada de escribir 0xffffffffu.

No tengo el compilador delante, pero debo admitir que ser me hace raro que no acepte un número con signo como índice. ¿Alguien con un PC cerca para probar lo que pasa?

teskmon

Corrección a mi comentario en #6: no es verdad que el array quede inicializado con el mismo valor en todas las componentes. Lo que dice el estándar es que las posiciones para las cuales no se especifique valor se inicializarán con cero. Estaba pensando en el caso particular en el que uno especifica como primera componente un cero, que produce como efecto lo que comentaba en #6. Sobre lo de que se admita que "main" sea un array en vez de una función: http://stackoverflow.com/a/34764930

D

#6 eres virgen?

u

Con gcc compila, lo he probado para el standard 89 y también para el 11. Lo que si da es el warning típico de no especificar el tipo de main, habría que añadir cuatro bytes más para que la compilación sea limpia, lo que dejaría el fuente en 19 bytes con salto de línea al final:

int main[-1u]=;

rafran

Pero a que paginas nos enviais... que el firewall de la empresa no me deja entrar en la pagina (digo que será por la palabra 'hack')

D

Habrán ganado por las reglas, así que no discuto su victoria pero me ha parecido poco creativo, habría que ver que han hecho los demás.

u

#48 Aquí está lo que han hecho los demás por si te pica la curiosidad:

http://codegolf.stackexchange.com/questions/69189/build-a-compiler-bomb

El de python 3 es mejor según la reglas, pero se gana por votaciones.

m

Soy novato en esto. Pero supongo que empleará una función recursiva muy potente.

slowRider

mira que he tirado líneas de C pero nunca se me hubiera ocurrido algo como esto!