Code Golf of Death [geschlossen]


34

Schreiben Sie Code, der eine BSOD- oder Kernel-Panik verursacht!

Regeln:

  • Unter Windows müssen Sie einen BugCheck (Blue Screen of Death) auslösen, unter Linux (oder anderen * nix-Systemen) müssen Sie eine Kernel-Panik auslösen.
  • Darf das System nicht beschädigen (dh es sollte beim Neustart funktionieren)
  • Kernelmodustreiber sind zulässig.
  • Geben Sie Ihre Betriebssystem- und Versionsinformationen an.
  • Erklären Sie, wie der Absturz verursacht wurde.
  • Es verstößt nicht gegen die Regeln, Tools zu verwenden, die speziell dafür entwickelt wurden, einen Absturz zu verursachen, aber dies ist nicht sehr kreativ!
  • Höchste Upvotes gewinnen.

3
@urogen - Als ich das letzte Mal nachgesehen habe, ist das Einfügen 1/0einer Datei mit dem Namen driver.ckein gültiger Kernelmodustreiber. Unabhängig davon basiert der Gewinner auf Aufstimmungen und nicht auf der Codelänge.
Polynom

1
Ich habe Meta Code Golf in letzter Zeit nicht mehr verfolgt - ist jetzt "höchste Bewertung" erlaubt? (Wenn dies der Fall ist, hat diese Website nur 100x mehr genial!)
Ry-

1
@minitech Es ist ein objektives Kriterium, deshalb verstehe ich nicht, warum es nicht erlaubt sein sollte.
Polynom

2
@Polynomial Ich habe es und fast alle Antworten positiv bewertet. Sie sind großartig und die Community wünscht sich aufrichtig, diese Art von Herausforderungen könnten zugelassen werden, aber das passt nicht zum SE-Modell.
Katze

4
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da dafür schädlicher Code erforderlich ist, der gegen unsere Regeln verstößt. meta.codegolf.stackexchange.com/a/4831/34718
mbomb007

Antworten:


24

Bash, x86 Linux 2.6.20 Kernel

Warnung: Der folgende Befehl kann Ihr System dauerhaft beschädigen.

cat /dev/urandom > /dev/mem

Wird folgendes ausgeben ( hier probieren ). Danach hängt das Skript.

/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

Hier ist eine weitere Ausnahme, die mit demselben Befehl gefunden wurde:

/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
Ich denke schon. Mit großer Macht kommt große Verantwortung.
Kopieren Sie den

15
Verstößt gegen das Muss die Systemanforderung nicht beschädigen - wenn Sie es genügend oft ausführen, wird es schließlich den Festplattentreiber mit Code neu schreiben, der die Festplatte formatiert.
Ugoren

5
@ugoren Das ist ein äußerst unwahrscheinliches Szenario. Es müsste eine Menge genauer 32-Bit-Adressen und Anweisungen an der richtigen Stelle schreiben und keine anderen überschreiben
kopieren Sie den

9
"Führen Sie es genügend oft aus, es wird schließlich den Plattentreiber mit Code neu schreiben, der die Platte formatiert" - Nicht sicher, urandom ist pseudozufällig.
Skeevey

3
@ugoren Die Regel "darf das System nicht beschädigen" ist nur, um Antworten wie zu verhindern sudo rm -Rf /. Die Wahrscheinlichkeit, dass das System mit dieser Methode dauerhaft beschädigt wird, ist geringer als die Wahrscheinlichkeit, dass beispielsweise die Ausgabe eines Satzes von Liedtexten basierend auf dem Hash des Texts brachial erzwungen wird.
Polynom

25

C 16 Zeichen für P5 x ​​86

main=-926478352;

Erinnerst du dich an den F00F-Bug ? Mit diesem kleinen Programm habe ich damals ein oder zwei Maschinen eingesperrt. (Ja, ich habe so lange Golf gespielt.)

Zugegeben, es ist nicht ganz das, wonach man gefragt hat, und es funktioniert nur auf alten Steppings der P5-Pentium-Chips. Aber es ist plattformübergreifend und funktioniert sowohl unter Linux als auch unter Windows!


2
Es ist bösartig, nicht wahr?

9

QBASIC, 38 Zeichen

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

Nicht sicher, wie Sie eine BSOD- oder Kernel-Panik in DOS definieren würden, aber dies ist wahrscheinlich ziemlich nah. Beim Ausführen wird der Bildschirm leer und der Computer reagiert auf nichts, nicht einmal Strg + Alt + Entf. Sie müssen mit einem Hard-Reset oder einem Aus- und Wiedereinschalten neu starten, um die Maschine wieder in Betrieb zu nehmen. Dies läuft unter DOS 6.22 unter VirtualBox. Ich weiß nicht genau, warum das System abstürzt, aber im Grunde schreibt das Programm (POKE) in den Speicher, in den es keine geschäftlichen Schreibvorgänge ausführt.


2
Der Grund, warum es abstürzt, ist, dass Sie den Systemprogrammspeicher mit Junk überschreiben.
Polynom

Ja, das wusste ich, aber ich habe mir etwas Spezifischeres überlegt. Ich bin mir nicht mal sicher, in welchen Teil des Gedächtnisses es schreibt.
Kibbee

1
Sie überschreiben die DOS-Interrupt-Vektoren und den COMMAND.COMProgrammcode, die in Adressen mit geringem Speicherplatz gespeichert sind. Quelle: img.tfd.com/cde/MEMMAP.GIF
Polynom

8

sh (in JSLinux)

Linux bietet dem init-Prozess einen besonderen Schutz vor Signalen . Allerdings ist mir aufgefallen, dass es sich bei JSLinux /sbin/initum ein Shell-Skript handelt, das andere Binärdateien ausführt (mit denen die meisten Links bestehen /bin/busybox).

Diese "unendliche" while-Schleife wird shbei Bedarf neu gestartet :

while /bin/true; do

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

done

Was ist jedoch, wenn /bin/truenicht immer der Exit-Code 0 zurückgegeben wird? /binbefindet sich im schreibgeschützten Root-Dateisystem, Linux lässt uns dies jedoch mithilfe von "bind" -Mounts ändern:

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

Und wir bekommen:

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

4

Bash unter Linux, 27 Zeichen

echo c>/proc/sysrq-trigger

Oder wenn Sie Sudo-Berechtigungen haben:

echo c|sudo tee /proc/sysrq-trigger

1
Das ergibt sh: can't create /proc/sysrq-trigger: nonexistent directoryfür mich. (obwohl dies in jsLinux ist, sollte ich wahrscheinlich auf einer echten Box testen)
Polynom

4

GTB , 13 Zeichen

Wird von einem TI-84-Rechner ausgeführt

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

Wenn der größte Teil des Arbeitsspeichers frei ist, stürzt er mit ab ERR:MEMORY

Andernfalls ist der RAM des Rechners so verstopft, dass er sich ausschaltet und es außerdem löscht.

Tolles Beispiel für einen "Taschenrechner-Virus"


Ich sehe, das ist nur puts +, ++, ++++etc. in Str0. Es gab mir ERR:MEMORY, aber der Versuch, Str0den Wert sofort anzuzeigen , stürzte meine 84+ ab. Außerdem habe ich dadurch alle meine Programme verloren.
LegionMammal978


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

In Bash Shell,

Ich bin mir nicht so sicher, ob dies hier zählt, aber wenn Sie es lange genug laufen lassen, überhitzt sich die CPU und das System stürzt ab, und es startet sicher und ohne Schaden neu, natürlich, wenn Sie es die ganze Zeit tun, wird es einige Systemschäden geben.


6
Das funktioniert nicht wirklich. Es dreht nur die CPU bei 100% Auslastung, was von jedem halbwegs ordentlichen Kühlsystem negiert wird. Ich habe Folding @ Home monatelang mit 100% iger CPU-Auslastung betrieben und die Maschine hat noch nie gestottert.
Polynom


2
@Optimus Du kannst es genauso gut hier lassen - es ist keine gültige Antwort, aber es schadet nicht. Eigentlich würde ich erwarten, dass eine Windows-Lösung schwieriger wird, da man unter Linux Dinge kaputt machen kann, wenn man es wirklich will.
Polynom

2
@Polynomial Ich glaube nicht, dass das stimmt, Linux dokumentiert nur besser , wie man es kaputt machen kann.
Hört auf, gegen den Uhrzeigersinn am

1
Ich stimme nicht zu. Windows wurde von Grund auf so konzipiert, dass Sie den Systemstatus nicht durch den Benutzermodus beschädigen können. Außerdem werden Sie nicht daran gehindert, wichtige Systemdateien über den Windows-Dateischutz, gesperrte Systemdateien usw. zu ändern. Linux wurde hingegen entwickelt auf eine Weise, die maximale Stabilität ermöglicht, wenn Sie nicht versuchen , sich damit herumzuschlagen. Aber wenn du dich damit anlegen willst, kannst du es. Zum Beispiel kann ich ändern /dev/memoder /dev/kmemwie ich es von root wünsche.
Polynom

2

Ruby (als root ausgeführt), 36 oder 40 Zeichen (je nach Übereinstimmung für /p*/s*r)

Lesen Sie http://www.kernel.org/doc/Documentation/sysrq.txt und suchen Sie nach 'c'(einschließlich Anführungszeichen!), Um herauszufinden, warum dies funktioniert.

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

EDIT: Längere Version, die funktioniert, wenn andere Dinge übereinstimmen /p*/s*r

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

EDIT 2: Absichtlich Overkill.


2
get-process | stop-process -force

in Powershell


1
"Es verstößt nicht gegen die Regeln, Tools zu verwenden, die speziell dafür entwickelt wurden, einen Absturz zu verursachen, aber dies ist nicht sehr kreativ!"
John Dvorak

1

Linux-Bash

cat /dev/zero > /dev/mem

Lösche den gesamten Speicher und verursache eine unendliche Kernel-Panik.

Probieren Sie es hier aus .


Wie verschieden ist das von diesem ? s/zero/urandom/.
NoOneIsHere

@NoOneIsHere Die Kernel-Panik hört bei dieser Version nie auf, und hier wird der Speicher gelöscht, nicht mit zufälligen Bytes gefüllt.
TuxCrafting

0

Batch, 15 Bytes

:A
start
goto A

Nur überläuft der Speicher in linearer Zeit, indem cmd.exeHunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte und Hunderte Male.

Es gibt ein tödlicheres (aber wahrscheinlich nicht konkurrierendes) 24-Byte-Programm, das sich immer wieder von selbst startet und so den Speicher in logarithmischer Zeit überfüllt (dh das Aufrüsten Ihres RAM verzögert den Absturz nicht). Angenommen, der folgende Code befindet sich in C:\a.bat:

:A
start C:\a.bat
goto A

.

Ehrlich gesagt habe ich Angst, diese auszuprobieren.


Hat jemand bemerkt, dass das letztere Programm eine Gabelbombe ist?
Dorukayhan will, dass Monica am

Ja, habe ich. :() { : | : & }; :
NoOneIsHere

warum nicht @0statt C:\a.bat?
Johannes Kuhn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.