Компиляторная бомба: 29 байт кода → 16 ГБ .exe

?v=1

Достойный наследник 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 гигабайт).

Конкурс на лучшую бомбу не закончен.

© Habrahabr.ru