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.

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?

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.

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?

Mister_Lala

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

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 ...

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')

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

a

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

r

#11 y no usar 0xffffffff, max_int o similares

D

#6 eres virgen?

c

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

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.

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...

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?)

f

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

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.

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?

D

#15 cierto.

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

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

Heimish

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

pawer13

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

fcruz

#29 Este se quedó en los 80.

r

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

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]=;

porcorosso

#26 ¿Tu también eres virgen?

angelitoMagno

#35 ¿Tu también eres tonto?

Marinmenyo

#15 Los flags usados al compilar tmb cuentan

a

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

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...

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..

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

pedrobz

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

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

S

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

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)

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.

j

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

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.

slowRider

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

m

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