Код Гольф Смерти [закрыто]


34

Напишите некоторый код, который вызывает BSOD или панику ядра!

Правила:

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

3
@urogen - В прошлый раз, когда я проверял, вставка 1/0файла с именем driver.cне является действительным драйвером режима ядра. Независимо от этого, победитель зависит от голосов, а не от длины кода.
Полином

1
Я не следил за Meta Code Golf в последнее время - разрешено ли «высоко голосование»? (Если это так, этот веб-сайт стал в 100 раз больше!)
Ry-

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
Нарушения не должны повредить системные требования - если вы запустите его достаточно много раз, он в конечном итоге перепишет драйвер диска с кодом, который форматирует диск.
Угорен

5
@ugoren Это крайне маловероятный сценарий. Нужно было бы написать кучу точных 32-битных адресов и инструкций в нужном месте и не перезаписывать других
скопируйте

9
«Запустите его достаточно раз, в конечном итоге драйвер диска будет переписан с кодом, который форматирует диск» - Не уверен, случайный случай - псевдослучайный.
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 дает процессу инициализации особую защиту от сигналов . Тем не менее, я заметил, что в JSLinux /sbin/initесть сценарий оболочки, который выполняет другие двоичные файлы (большинство ссылок на них /bin/busybox).

Этот «бесконечный» цикл while перезапускается по shмере необходимости:

while /bin/true; do

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

done

Однако что, если /bin/trueне всегда возвращается код выхода 0? /binнаходится в корневой файловой системе только для чтения, но Linux позволяет нам изменить это с помощью монтирования «bind»:

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

Или, если у вас есть права sudo:

echo c|sudo tee /proc/sysrq-trigger

1
Это приводит sh: can't create /proc/sysrq-trigger: nonexistent directoryдля меня. (хотя это в jsLinux, поэтому я, вероятно, должен проверить на реальной коробке)
Полином

4

GTB , 13 символов

Выполнено из калькулятора ТИ-84

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

Если большая часть оперативной памяти свободна, она потерпит крах с ERR:MEMORY

В противном случае ОЗУ калькулятора настолько забивается, что отключается и, кроме того, очищается.

Отличный пример "вируса калькулятора"


Я вижу, это только путы +, ++, ++++и т.д. в Str0. Это дало мне ERR:MEMORY, но попытка отобразить Str0значение мгновенно упала на 84+. Кроме того, это заставило меня потерять все мои программы.
LegionMammal978


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

В оболочке bash,

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


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}

РЕДАКТИРОВАТЬ: более длинная версия, которая работает, если у вас есть другие вещи, соответствующие /p*/s*r

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

РЕДАКТИРОВАТЬ 2: преднамеренно излишним.


2
get-process | stop-process -force

в PowerShell


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.