Код гольфу смерті [закрито]


34

Напишіть код, який викликає паніку BSOD або ядра!

Правила:

  • У Windows ви повинні викликати BugCheck (Синій екран смерті), в Linux (або інших системах * nix) ви повинні викликати паніку ядра.
  • Не повинен пошкоджувати систему (тобто вона повинна працювати при перезавантаженні)
  • Драйвери в режимі ядра дозволені.
  • Вкажіть інформацію про вашу ОС та версію.
  • Поясніть, як спричинено збій.
  • Це не проти правил використовувати інструменти, спеціально розроблені для спричинення аварій, але це не дуже креативно!
  • Виграє найвищий результат.

3
@urogen - Останній раз, коли я перевірив, введення 1/0файлу під назвою driver.cне є дійсним драйвером режиму ядра. Незалежно від того, переможець ґрунтується на анотаціях, а не на довжині коду.
Поліном

1
Я останнім часом не слідкую за мета-гольфом Golf - тепер "дозволено"? (Якщо це так, то цей сайт тільки що отримав 100x більш дивним!)
Рибаковим

1
@minitech Це об'єктивні критерії, тому я не розумію, чому це не можна допускати.
Поліном

2
@ Polynomial Я підтримав це, і майже на всі відповіді вони чудові, і громада щиро бажає, щоб подібні виклики могли бути дозволені, але це не відповідає моделі SE.
кіт

4
Я голосую, щоб закрити це питання поза темою, оскільки для нього потрібен шкідливий код, який порушує наші правила. meta.codegolf.stackexchange.com/a/4831/34718
mbomb007

Відповіді:


24

Bash, x86 Linux 2.6.20 ядро

Попередження: наступна команда може завдати постійної шкоди вашій системі.

cat /dev/urandom > /dev/mem

Виведе наступне ( спробуйте тут ). Після цього сценарій висить.

/var/root # cat /dev/urandom > /dev/mem                                        
BUG: unable to handle kernel paging request at virtual address 474e82a5         
 printing eip:                                                                  
c01450c4                                                                        
*pde = 00000000                                                                 
Oops: 0000 [#1]                                                                 
CPU:    0                                                                       
EIP:    0060:[<c01450c4>]    Not tainted VLI                                    
EFLAGS: 00000082   (2.6.20 #12)                                                 
EIP is at free_block+0x54/0xf0                                                  
eax: 00000000   ebx: 474e82a1   ecx: c00745c8   edx: c0005e80                   
esi: c0070ce0   edi: c002c1a0   ebp: 00000000   esp: c0085eec                   
ds: 007b   es: 007b   ss: 0068                                                  
Process events/0 (pid: 3, ti=c0084000 task=c0094030 task.ti=c0084000)           
Stack: c0076410 00000002 c0051db0 c0051db0 c0051da0 00000002 c002c1a0 c01457dd  
       00000000 c0070ce0 c002c1a0 c0091840 c0145800 c0145870 00000000 00000000  
       c02cb2a0 c02cb2a0 00000296 c011dd27 c003fab0 c0094030 c009413c 00047e6c  
Call Trace:                                                                     
 [<c01457dd>] drain_array+0x7d/0xa0                                             
 [<c0145800>] cache_reap+0x0/0x110                                              
 [<c0145870>] cache_reap+0x70/0x110                                             
 [<c011dd27>] run_workqueue+0x67/0x130                                          
 [<c011df17>] worker_thread+0x127/0x140                                                                
 [<c010c7d0>] default_wake_function+0x0/0x10                                    
 [<c010c817>] __wake_up_common+0x37/0x70                                        
 [<c010c7d0>] default_wake_function+0x0/0x10                                    
 [<c011ddf0>] worker_thread+0x0/0x140                                           
 [<c0120d94>] kthread+0x94/0xc0                                                 
 [<c0120d00>] kthread+0x0/0xc0                                                  
 [<c0102ee7>] kernel_thread_helper+0x7/0x10                                     
 =======================                                                        
Code: 04 0f 8d 8f 00 00 00 8b 44 24 08 8b 0c a8 8d 91 00 00 00 40 c1 ea 0c c1 e2

Ось ще один виняток, знайдений з тією ж командою:

/dev # cat urandom > mem                                                        
------------[ cut here ]------------                                            
Kernel BUG at c014514c [verbose debug info unavailable]                         
invalid opcode: 0000 [#1]                                                       
CPU:    0                                                                       
EIP:    0060:[<c014514c>]    Not tainted VLI                                    
EFLAGS: 00000046   (2.6.20 #12)                                                 
EIP is at free_block+0xdc/0xf0                                                  
eax: 1608347b   ebx: c009b010   ecx: c003f508   edx: c00057e0                   
esi: c009b000   edi: c002cd40   ebp: 00000000   esp: c0085eec                   
ds: 007b   es: 007b   ss: 0068                                                  
Process events/0 (pid: 3, ti=c0084000 task=c0094030 task.ti=c0084000)           
Stack: c009b010 00000004 c009b010 c009b010 c009b000 00000004 c002cd40 c01457dd  
       00000000 c02ddf20 c002cd40 c0091840 c0145800 c0145870 00000000 00000000  
       c02cb2a0 c02cb2a0 00000296 c011dd27 c005c5a0 c0094030 c009413c 000409ed  

6
Я так гадаю. З великою силою настає велика відповідальність.
копія

15
Порушує Потрібно не пошкодити системну вимогу - якщо запустити її достатньо разів, вона з часом перезаписає драйвер диска з кодом, який форматує диск.
ugoren

5
@ugoren Це надзвичайно малоймовірний сценарій. Доведеться записати в потрібне місце купу точних 32-бітових адрес та інструкцій, а не перезаписувати інших
скопіюйте

9
"запустіть його достатньо разів, він з часом перезаписає драйвер диска з кодом, який форматує диск" - Невідомо, urandom є псевдослучайним.
skeevey

3
@ugoren Правило "не повинно пошкодити систему" - це лише запобігання подібних відповідей sudo rm -Rf /. Шанси заподіяти постійний збиток системі, використовуючи цей метод, менші, ніж шанси на, наприклад, жорстоке форсування виводу набору пісень пісень на основі хешу тексту.
Поліном

25

C, 16 символів, для P5 x86

main=-926478352;

Пам'ятаєте помилку F00F з усіма? Я допоміг зафіксувати машину чи дві назад у цей день за допомогою цієї маленької програми. (Так, я так довго займався гольфом.)

Зрозуміло, це не зовсім те, що просили, і він працює лише на старих степпінгах P5 Pentium. Але на його користь, це кросплатформна робота, яка працює і на Linux, і на Windows!


2
Це шкідливо, чи не так?

9

QBASIC, 38 символів

DEF SEG=0:FOR I=0 TO 4^8:POKE I,1:NEXT

Не впевнений, як би ви визначили паніку BSOD або Kernel в DOS, але це, мабуть, досить близько. Під час запуску екран просто зникає, і машина нічого не відповідає, навіть Ctrl + Alt + Delete. Вам потрібно перезапустити за допомогою жорсткого перезавантаження або циклу живлення, щоб знову запустити машину. Це працює на DOS 6.22 під VirtualBox. Не точно знаю, чому це призводить до краху системи, але, в основному, програма записує (POKE) в пам'ять, на яку вона не має ділових записів.


2
Причина, в якій вона виходить з ладу, полягає в тому, що ви перезаписуєте пам’ять системної програми на непотріб.
Поліном

Так, я це знав, але думав про щось трохи конкретніше. Я навіть не впевнений, в яку частину пам'яті пишеться.
Кіббі

1
Ви перезаписуєте вектори переривання DOS і COMMAND.COMпрограмний код, що зберігається в низькій кількості пам'яті. Джерело: img.tfd.com/cde/MEMMAP.GIF
Поліном

8

sh (в JSLinux)

Linux надає процесу init особливий захист від сигналів . Однак я помітив, що в JSLinux,/sbin/init - це сценарій оболонки, який виконує інші бінарні файли (більшість з яких посилається на /bin/busybox).

Цей "нескінченний" цикл shпри необхідності перезапускається :

while /bin/true; do

  setsid sh -c 'exec sh </dev/ttyS0 >/dev/ttyS0 2>&1'

done

Однак що робити, якщо /bin/trueне завжди повертається вихідний код 0? /binзнаходиться в кореневій файловій файловій системі, але Linux дозволяє нам змінити, використовуючи кріплення "прив'язувати":

cp -R /bin /tmp/boom
rm /tmp/boom/true
printf '#!/bin/sh\nexec [ $PPID != 1 ]' > /tmp/boom/true
chmod 755 /tmp/boom/true
mount -o bind /tmp/boom /bin
killall -9 sh

І ми отримуємо:

/var/root # ./boom.sh
Killed
Kernel panic - not syncing: Attempted to kill init!

4

Bash на Linux, 27 символів

echo c>/proc/sysrq-trigger

Або якщо у вас є дозволи на судо:

echo c|sudo tee /proc/sysrq-trigger

1
Це призводить sh: can't create /proc/sysrq-trigger: nonexistent directoryдо мене. (хоча це в jsLinux, тому я, мабуть, повинен перевірити справжню коробку)
Поліном

4

GTB , 13 символів

Виконується з калькулятора TI-84

:"+"→_[_+_→_]

Якщо більша частина оперативної пам’яті буде вільною, вона вийде з ладу ERR:MEMORY

В іншому випадку оперативна пам'ять калькулятора настільки засмічена, що вона вимикається та очищує її.

Чудовий приклад "вірусу калькулятора"


Я бачу, це тільки пута +, ++, ++++і т.д. в Str0. Це дало мені ERR:MEMORY, але спроба відобразити Str0значення миттєво розбила мої 84+. Також це змусило мене втратити всі свої програми.
LegionMammal978


2
:(){ :|:& };:

У панцирі,

Я не дуже впевнений, якщо це враховується тут, але якщо ви дозволите йому працювати досить довго, процесор перегрівається і системні збої, і він перезавантажується безпечно без шкоди, звичайно, якщо ви будете робити це весь час, буде якийсь пошкодження системи.


6
Це насправді не працює. Він просто обертає процесор при 100% використанні, що заперечується будь-якою наполовину пристойною системою охолодження. Я багато місяців працював у Folding @ Home зі 100% використанням процесора і ніколи не працював на машині навіть заїкаючись.
Поліном


2
@Optimus Ви також можете залишити його тут - це неправдива відповідь, але це не приносить ніякої шкоди. Я насправді очікував, що рішення Windows буде складніше, оскільки Linux дозволяє вам ламати речі, якщо ви дійсно цього хочете.
Поліном

2
@Polynomial Я не думаю, що це правда, Linux лише краще документує способи, як ви можете їх зламати.
перестала повертати проти годинника,

1
@leftaroundabout Я не згоден. Windows розроблена з самого початку, щоб активно запобігти пошкодженню стану системи в користувальницькому режимі, а також не дозволяє вам змінювати критичні системні файли через захист файлів Windows, заблоковані системні файли тощо. Linux, з іншого боку, розроблений таким чином, що дозволяє досягти максимальної стабільності, якщо ви не намагаєтеся з цим возитися. Але, якщо ви дійсно хочете возитися з ним, ви можете. Наприклад, я можу змінити /dev/memабо /dev/kmemяк я хочу з root.
Поліном

2

Ruby (запустити як root), 36 або 40 символів (залежно від відповідності для /p*/s*r )

Перегляньте сторінку http://www.kernel.org/doc/Documentation/sysrq.txt і знайдіть 'c'(включаючи цитати!), Щоб дізнатися, чому це працює.

open(Dir['/p*/s*r'][0],?a){|f|f<<?c}

EDIT: Більш дрібна версія, яка працює, якщо у вас інші речі відповідають /p*/s*r

open('/proc/sysrq-trigger',?a){|f|f<<?c}

EDIT 2: Навмисне перевиконання.


2
get-process | stop-process -force

в оболонці


1
"Це не проти правил використовувати інструменти, спеціально розроблені для спричинення збоїв, але це не дуже креативно!"
Іван Дворак

1

Linux bash

cat /dev/zero > /dev/mem

Очистіть всю пам'ять і викликайте нескінченну паніку ядра.

Спробуйте тут .


Наскільки це відрізняється від цього ? s/zero/urandom/.
NoOneIsHere

@NoOneIsHere Паніка ядра ніколи не припиняється з цією версією, і тут пам'ять очищається, а не заповнюється випадковими байтами.
TuxCrafting

0

Пакет, 15 байт

:A
start
goto A

Просто заповнює пам'ять у лінійний час шляхом запуску cmd.exe сотні і сотні, сотні і сотні, сотні і сотні, сотні і сотні, сотні і сотні, сотні і сотні, сотні і сотні, сотні і сотні сотень і сотень. сотні і сотні і сотні і сотні і сотні і сотні разів.

Там в смертоносному (але , ймовірно , не конкурують) 24 байт програма , яка запускається сам по собі знову і знову, таким чином , переповнена пам'яті в логарифмічна час (тобто оновлення оперативної пам'яті не відтягнути крах). Припустимо, наведений нижче код знаходиться у C:\a.bat:

:A
start C:\a.bat
goto A

.

Чесно кажучи, я боюся спробувати це.


Хтось помітив, що остання програма - це вилка бомба?
снідакайхан хоче, щоб Моніка повернулась

Так. :() { : | : & }; :
NoOneIsHere

чому б не @0замість цього C:\a.bat?
Йоганнес Кун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.