Comments 33
Придумано в 2016 году!
"Конкурс не закончен" — потому что это stackoverflow, там отвечать можно когда угодно. Подсайт code golf, на котором как раз изощряются в "напиши странную штуку за минимальное количество байт".
Немного напомнило «оператор подергивания» ++i--
Компилировать на продакшн-машине не рекомендуется.«Достаточно одной таблетки.» — «Доктор, а можно две?» — «Не рекомендуется, но можно.» — «А три?» — "… Можно, но не рекомендуется." «72 метра»
www.tutorialspoint.com/compile_c_online.php
ttldt@DESKTOP-FT9USOD MINGW64 /c/w/cpp/bmb
$ time gcc -mcmodel=medium main.c -o cbomb
main.c:1:1: warning: data definition has no type or storage class
1 | main[-1u]={1};
| ^~~~
main.c:1:1: warning: type defaults to 'int' in declaration of 'main' [-Wimplicit-int]
real 3m38,529s
user 0m0,000s
sys 0m0,015s
ttldt@DESKTOP-FT9USOD MINGW64 /c/w/cpp/bmb
$ ls -al
итого 125
drwxr-xr-x 1 ttldt ttldt 0 июл 7 13:35 .
drwxr-xr-x 1 ttldt ttldt 0 июл 7 13:23 ..
-rwxr-xr-x 1 ttldt ttldt 126395 июл 7 13:35 cbomb.exe
-rw-r--r-- 1 ttldt ttldt 14 июл 7 13:24 main.c
「 dvrpd@lptp 」 ~/test % time gcc -mcmodel=medium bomb.c -o bomb
bomb.c:1:1: предупреждение: определение данных не содержит ни типа, ни класса хранения
1 | main[-1u]={1};
| ^~~~
bomb.c:1:1: предупреждение: в декларации «main» по умолчанию установлен тип «int» [-Wimplicit-int]
gcc -mcmodel=medium bomb.c -o bomb 46,30s user 62,75s system 95% cpu 1:53,73 total
「 dvrpd@lptp 」 ~/test % ls -l bomb
-rwxr-xr-x 1 dvrpd users 17179885600 июл 7 17:36 bomb
А вот clang собирать отказался.bomb.c:1:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main[-1u]={1};
^
bomb.c:1:1: warning: variable named 'main' with external linkage has undefined behavior [-Wmain]
fatal error: error in backend: invalid number of bytes
Не каждая машина осилит такую компиляцию
Нда, это уж точно.
fatal error: error in backend: invalid number of byte
Еще один отличный пример, показывающий необходимость огораживать CI (либо не допуская в него кого попало, либо используя одноразовые виртуалки или контейнеры с ограничениями на ресурсы).
Если проскролить ниже, есть варианты и с петабайтами готового бинаря.
Компиляторная бомба: 29 байт кода → 16 ГБ .exe
Но разве формат .exe не ограничен 2ГБ?

Ну или формулируйте вопрос более внятно. Может, в какой-то среде/компиляторе и ограничен.
Речь о формате .exe, а не файле с расширением exe, заполненном нулями.
Играет другое ограничение что 32-х битная программа может адресовать только 4Gb памяти, из них как правило 2Gb это адресное пространство ОС(включая порты вводы вывода и т.д.) а 2GB остается на программу где будет куча и стеки всех запущенных потоков. Для 64-х битной программы такого ограничения нету.
Для 64-х битной программы такого ограничения нету.
Из описания формата PE на сайте MS:
PE32+ images allow for a 64-bit address space while limiting the image size to 2 gigabytes.
Или это относится к чему-то другому?
Насколько я помню, ещё есть "забавные особенности" винды в виде ограничения размера стека в 1GB, с которыми тоже мало кто сталкивается.
Но суть в том, что в заголовке статьи .exe, а в тексте статьи — RedHat.
По поводу «адресное пространство ОС» — скажем виртуалка (вся ОС) с 2 ГБ и Win 7 x86 могла тратить только 800 МБ на стадии закачки обнов, если установить сначала 2 нужные обновы. Если не установить — процесс поиска обнов именно падает на том, что svchost.exe превышает 2 ГБ памяти.
Компилировать на продакшн-машине не рекомендуется.продакшн-машина грустит в стороне
Пример:
$ gcc cbomb.c -o cbomb.o
cbomb.c:1:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main[-1u]={1};
^
cbomb.c:1:1: warning: variable named 'main' with external linkage has undefined behavior [-Wmain]
fatal error: error in backend: invalid number of bytes
$ gcc -mcmodel=medium cbomb.c -o cbomb.o
cbomb.c:1:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main[-1u]={1};
^
cbomb.c:1:1: warning: variable named 'main' with external linkage has undefined behavior [-Wmain]
fatal error: error in backend: invalid number of bytes
$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
PNG-бомбы (которая в своё время положила Хабр)
… до слез. Вмятины от укладываний остались? Фото в студию.
main[-1u]={1};
Очень эмоционально написано. Это не бомба, это протест! Если помочь этому блоку в volatile, то можно унести в кармане облако.
Компиляторная бомба: 29 байт кода → 16 ГБ .exe