Code Golf of Death [zamknięte]


34

Napisz kod, który powoduje panikę BSOD lub jądra!

Zasady:

  • W systemie Windows musisz spowodować błąd BugCheck (niebieski ekran śmierci), w systemie Linux (lub innych systemach * nix) musisz wywołać panikę jądra.
  • Nie może uszkodzić systemu (tzn. Powinien działać przy ponownym uruchomieniu)
  • Dozwolone są sterowniki trybu jądra.
  • Podaj informacje o systemie operacyjnym i wersji.
  • Wyjaśnij, jak spowodowana jest awaria.
  • Używanie narzędzi zaprojektowanych specjalnie w celu spowodowania awarii nie jest sprzeczne z zasadami, ale nie jest to zbyt kreatywne!
  • Najwyższe zwycięstwa wygrywają.

3
@urogen - Kiedy ostatnio sprawdzałem, umieszczenie 1/0pliku o nazwie driver.cnie stanowi prawidłowego sterownika trybu jądra. Niezależnie od tego zwycięzca opiera się na pozytywnych opiniach, a nie na długości kodu.
Wielomian

1
Ostatnio nie śledzę Meta Code Golf - czy „najwyższe uznanie” jest teraz dozwolone? (Jeśli tak jest, ta strona właśnie
zrobiła

1
@minitech To obiektywne kryteria, więc nie rozumiem, dlaczego nie powinno być dozwolone.
Wielomian

2
@Polynomial Głosowałem za tym i prawie wszystkie odpowiedzi są świetne, a społeczność naprawdę chce, aby tego rodzaju wyzwania były dozwolone, ale to nie pasuje do modelu SE.
kot

4
Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ wymaga złośliwego kodu, który narusza nasze zasady. meta.codegolf.stackexchange.com/a/4831/34718
mbomb007

Odpowiedzi:


24

Bash, jądro Linuksa 2.6.20 x86

Ostrzeżenie: następujące polecenie może spowodować trwałe uszkodzenie systemu.

cat /dev/urandom > /dev/mem

Wyprowadzi następujące ( spróbuj tutaj ). Następnie skrypt zawiesza się.

/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

Oto kolejny wyjątek znaleziony za pomocą tego samego polecenia:

/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
Chyba tak. Z dużą mocą przychodzi duża odpowiedzialność.
skopiuj

15
Narusza zasadę Nie wolno uszkadzać wymagania systemowego - jeśli uruchomisz go wystarczająco dużo razy, ostatecznie przepisuje sterownik dysku kodem formatującym dysk.
ugoren

5
@ugoren To niezwykle mało prawdopodobny scenariusz. Musiałby napisać kilka dokładnych 32-bitowych adresów i instrukcji w odpowiednim miejscu i nie nadpisywać innych
skopiuj

9
„uruchom go wystarczająco dużo, ostatecznie przepisuje sterownik dysku kodem, który formatuje dysk” - Nie jestem pewien, urandom jest pseudolosowy.
skeevey

3
@ugoren Reguła „nie wolno uszkadzać systemu” ma na celu wyłącznie zapobieganie odpowiedziom sudo rm -Rf /. Szanse na trwałe uszkodzenie systemu przy użyciu tej metody są mniejsze niż, powiedzmy, brutalne wymuszenie wyjścia zestawu tekstów piosenek opartych na haszowaniu tekstu.
Wielomian

25

C, 16 znaków, dla P5 x86

main=-926478352;

Pamiętasz błąd F00F wszyscy? Dzięki temu małemu programowi pomogłem zamknąć maszynę lub dwie z powrotem w ciągu dnia. (Tak, grałem w golfa od tak dawna.)

To prawda, że ​​nie do końca tego wymagano i działa tylko na starych krokach układów P5 Pentium. Ale na swoją korzyść jest wieloplatformowy, działa zarówno na systemie Linux, jak i Windows!


2
To złośliwe, prawda?

9

QBASIC, 38 znaków

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

Nie jestem pewien, jak zdefiniowałbyś panikę BSOD lub jądra w DOS, ale prawdopodobnie jest to całkiem blisko. Po uruchomieniu ekran po prostu gaśnie, a maszyna reaguje na nic, nawet Ctrl + Alt + Delete. Musisz ponownie uruchomić twardy reset lub cykl zasilania, aby ponownie uruchomić maszynę. Działa to na DOS 6.22 pod VirtualBox. Nie wiem dokładnie, dlaczego powoduje awarię systemu, ale w zasadzie program zapisuje (POKE) w pamięci, w której nie ma zapisu biznesowego.


2
Przyczyną awarii jest to, że zastępujesz pamięć programu systemowego śmieciami.
Wielomian

Tak, wiedziałem o tym, ale myślałem o czymś bardziej szczegółowym. Nie jestem nawet pewien, do jakiej części pamięci pisze.
Kibbee

1
Nadpisujesz wektory przerwania DOS i COMMAND.COMkod programu przechowywane w adresach o małej ilości pamięci. Źródło: img.tfd.com/cde/MEMMAP.GIF
Polynomial

8

sh (w JSLinux)

Linux zapewnia procesowi init specjalną ochronę przed sygnałami . Zauważyłem jednak, że w JSLinux /sbin/initjest skryptem powłoki, który wykonuje inne pliki binarne (najczęściej dowiązane symbolicznie /bin/busybox).

Ta „nieskończona” pętla podczas restartuje się shw razie potrzeby:

while /bin/true; do

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

done

Co jednak, jeśli /bin/truenie zawsze zwraca kod wyjścia 0? /binznajduje się w głównym systemie plików tylko do odczytu, ale Linux pozwala nam to zmienić za pomocą montowania „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

I otrzymujemy:

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

4

Bash na Linuksie, 27 znaków

echo c>/proc/sysrq-trigger

Lub jeśli masz uprawnienia sudo:

echo c|sudo tee /proc/sysrq-trigger

1
To powoduje sh: can't create /proc/sysrq-trigger: nonexistent directorydla mnie. (chociaż jest to w jsLinux, więc powinienem prawdopodobnie przetestować na prawdziwym pudełku)
Polynomial

4

GTB , 13 znaków

Wykonane z kalkulatora TI-84

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

Jeśli większość pamięci RAM jest wolna, nastąpi awaria ERR:MEMORY

W przeciwnym razie pamięć RAM kalkulatora jest tak zatkana, że ​​wyłącza się i czyści poza tym.

Świetny przykład „wirusa kalkulatora”


Widzę to po prostu kładzie +, ++, ++++, itd. W Str0. Dało mi to ERR:MEMORY, ale próba wyświetlenia Str0wartości natychmiast rozbiła moją 84+. To także spowodowało, że straciłem wszystkie moje programy.
LegionMammal978


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

W powłoce bash

Nie jestem pewien, czy to się tutaj liczy, ale jeśli pozwolisz mu działać wystarczająco długo, przegrzewa się procesor i powoduje awarie systemu, i uruchamia się ponownie bezpiecznie bez szkody, oczywiście jeśli będziesz to robił przez cały czas, nastąpi uszkodzenie systemu.


6
To naprawdę nie działa. Po prostu obraca procesor przy 100% obciążeniu, co neguje każdy na wpół przyzwoity system chłodzenia. Od miesięcy korzystam z Folding @ Home przy 100% obciążeniu procesora i nigdy nie miałem problemów z maszyną.
Wielomian


2
@Optimus Równie dobrze możesz zostawić to tutaj - to nie jest poprawna odpowiedź, ale nie wyrządza żadnej szkody. Spodziewałbym się, że rozwiązanie dla systemu Windows będzie trudniejsze, ponieważ Linux pozwala ci zepsuć wszystko, jeśli naprawdę chcesz.
Wielomian

2
@Polynomial Nie sądzę, że to prawda, Linux lepiej dokumentuje tylko sposoby, w jakie możesz to złamać.
przestał obracać przeciwnie do zegara

1
@leftaroundabout Nie zgadzam się. System Windows został zaprojektowany od podstaw, aby aktywnie zapobiegać uszkodzeniu stanu systemu w trybie użytkownika, a także powstrzymuje Cię przed modyfikowaniem krytycznych plików systemowych za pomocą Ochrony plików systemu Windows, zablokowanych plików systemowych itp. Z drugiej strony system Linux został zaprojektowany w sposób, który pozwala na maksymalną stabilność, jeśli nie spróbujesz z tym popsuć. Ale, jeśli nie chcą zadzierać z nim, można. Na przykład mogę modyfikować /dev/memlub /dev/kmemwedług własnego uznania z poziomu roota.
Wielomian

2

Ruby (uruchamiany jako root), 36 lub 40 znaków (w zależności od dopasowań dla /p*/s*r )

Zobacz http://www.kernel.org/doc/Documentation/sysrq.txt i wyszukaj 'c'(w tym cytaty!), Aby zobaczyć, dlaczego to działa.

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

EDYCJA: Dłuższa wersja, która działa, jeśli masz inne pasujące elementy /p*/s*r

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

EDYCJA 2: Celowo przesada.


2
get-process | stop-process -force

w PowerShell


1
„Używanie narzędzi zaprojektowanych specjalnie w celu spowodowania awarii nie jest sprzeczne z zasadami, ale nie jest to zbyt kreatywne!”
John Dvorak

1

Linux bash

cat /dev/zero > /dev/mem

Wyczyść całą pamięć i wywołaj nieskończoną panikę jądra.

Wypróbuj tutaj .


Jak to się różni od tego ? s/zero/urandom/.
NoOneIsHere

@NoOneIsHere Panika jądra nigdy nie kończy się w tej wersji, a tutaj pamięć jest czyszczona, nie jest wypełniana losowymi bajtami.
TuxCrafting

0

Partia, 15 bajtów

:A
start
goto A

Po prostu przepełnia pamięć w czasie liniowym, uruchamiając cmd.exe setki i setki i setki i setki i setki i setki i setki i setki i setki i setki i setki i setki i setki i setki i setki i setki i setki i setki setki, setki, setki, setki, setki i setki razy.

Jest śmiertelna (ale prawdopodobnie nie konkurują) Program 24-bajtowy, który uruchamia się sobie w kółko, więc przepełnione pamięć w czasie logarytmicznym (tj modernizacji RAM nie opóźnić katastrofę). Załóżmy, że poniższy kod znajduje się w C:\a.bat:

:A
start C:\a.bat
goto A

.

Szczerze mówiąc, boję się ich wypróbować.


Czy ktoś zauważył, że ten drugi program to bomba widelcowa?
dorukayhan chce Moniki z powrotem

Tak. :() { : | : & }; :
NoOneIsHere

dlaczego nie @0zamiast C:\a.bat?
Johannes Kuhn
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.