Компиляторная бомба: 29 байт кода → 16 ГБ .exe
Достойный наследник ZIP-бомбы и PNG-бомбы (которая в своё время положила Хабр) — компиляторная бомба, которая генерирует огромный бинарник из нескольких строчек кода. Наилучший на сегодня вариант предложил в 2016 году пользователь StackExchange под ником Digital Trauma (последняя версия протестирована в 2020 году). Код на C:
main[-1u]={1};
Это 14 байт. По условиям конкурса к коду добавляется 15 обязательных байт.
Данный код определяет функцию main
как большой массив и инициализирует его первый элемент. Такое поведение заставляет компилятор GCC хранить весь массив в результирующем исполняемом файле.
Поскольку массив больше двух гигабайт, при компиляции следует указать флаг -mcmodel=medium
.
Компиляция следующей командой:
gcc -mcmodel=medium cbomb.c -o cbomb
Не каждая машина осилит такую компиляцию. Эксперименты показали, что с ней справляется виртуальная машина RedHat 5.6 с 10 ГБRAM, свопом на 12 ГБ и большим локальным разделом в /tmp. GCC версии 4.1.2. Общее время компиляции около 27 минут.
Компилировать на продакшн-машине не рекомендуется.
В итоге получается исполняемый файл размером 17 179 875 837 байт (16 гигабайт).
Конкурс на лучшую бомбу не закончен.