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.