รหัส Golf of Death [ปิด]


34

เขียนโค้ดที่ทำให้ BSOD หรือเคอร์เนลตกใจ!

กฎ:

  • บน Windows คุณต้องทำให้ BugCheck (Blue Screen of Death) บน Linux (หรือระบบ * nix อื่น ๆ ) คุณต้องทำให้เคอร์เนลตกใจ
  • ต้องไม่เกิดความเสียหายกับระบบ (เช่นควรทำงานเมื่อรีบูต)
  • อนุญาตให้ใช้ไดรเวอร์โหมดเคอร์เนล
  • ระบุข้อมูลระบบปฏิบัติการและเวอร์ชั่นของคุณ
  • อธิบายว่าเกิดความผิดพลาดได้อย่างไร
  • ไม่ใช่กฎที่ใช้เครื่องมือที่ออกแบบมาโดยเฉพาะเพื่อให้เกิดความผิดพลาด แต่การทำเช่นนั้นไม่สร้างสรรค์มาก!
  • ผู้ชนะสูงสุดจะได้รับชัยชนะ

3
@urogen - ครั้งสุดท้ายที่ฉันตรวจสอบการใส่1/0ไฟล์ที่เรียกdriver.cว่าไม่ได้เป็นไดรเวอร์โหมดเคอร์เนลที่ถูกต้อง ไม่ว่าผู้ชนะจะขึ้นอยู่กับ upvotes ไม่ใช่ความยาวโค้ด
พหุนาม

1
ฉันไม่ได้ติดตาม Meta Code Golf เมื่อเร็ว ๆ นี้ - อนุญาต "upvoted สูงสุด" ตอนนี้หรือไม่ (หากเป็นกรณีนี้เว็บไซต์นี้มีความยอดเยี่ยมมากขึ้น 100x!)
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
ละเมิดการห้ามไม่ให้เกิดความเสียหายต่อความต้องการของระบบ - หากคุณใช้งานได้นานพอในที่สุดก็จะเขียนไดรเวอร์ดิสก์อีกครั้งด้วยรหัสที่ฟอร์แมตดิสก์
ugoren

5
@ugoren นั่นเป็นสถานการณ์ที่ไม่น่าเป็นไปได้ มันจะต้องเขียนที่อยู่ 32 บิตที่ถูกต้องและคำแนะนำในสถานที่ที่เหมาะสมและไม่เขียนทับคนอื่น ๆ
คัดลอก

9
"เรียกใช้เวลาเพียงพอในที่สุดมันจะเขียนโปรแกรมควบคุมดิสก์ด้วยรหัสที่ฟอร์แมตดิสก์ใหม่" - ไม่แน่ใจว่า urandom คือ pseudorandom
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 panic ใน DOS ได้อย่างไร แต่นี่อาจใกล้เคียง เมื่อเรียกใช้หน้าจอจะว่างเปล่าและเครื่องตอบสนองต่อสิ่งใดแม้แต่ Ctrl + Alt + Delete คุณต้องรีสตาร์ทโดยใช้ฮาร์ดรีเซ็ตหรือวงจรพลังงานเพื่อให้เครื่องกลับมาทำงานอีกครั้ง สิ่งนี้ทำงานบน DOS 6.22 ภายใต้ VirtualBox ไม่แน่ใจว่าสาเหตุที่ทำให้ระบบขัดข้อง แต่โดยทั่วไปโปรแกรมกำลังเขียน (POKE) ไปยังหน่วยความจำว่าไม่มีการเขียนเชิงธุรกิจ


2
สาเหตุที่เกิดปัญหาเนื่องจากคุณเขียนทับหน่วยความจำโปรแกรมระบบด้วยขยะ
พหุนาม

ใช่ฉันรู้ว่า แต่ฉันกำลังคิดบางอย่างที่เฉพาะเจาะจงมากขึ้น ฉันไม่แน่ใจด้วยซ้ำว่าส่วนไหนของหน่วยความจำที่เขียนไป
Kibbee

1
คุณกำลังเขียนทับเวกเตอร์ขัดจังหวะ DOS และCOMMAND.COMรหัสโปรแกรมที่เก็บไว้ในที่อยู่หน่วยความจำเหลือน้อย ที่มา: img.tfd.com/cde/MEMMAP.GIF
โพลิโนเมียล

8

sh (ใน JSLinux)

ลินุกซ์จะช่วยให้กระบวนการ init คุ้มครองเป็นพิเศษกับสัญญาณ อย่างไรก็ตามฉันสังเกตเห็นว่าใน JSLinux /sbin/initเป็นเชลล์สคริปต์ที่ดำเนินการไบนารีอื่น ๆ (ส่วนใหญ่ symlinked ไป/bin/busybox)

"infinite" นี้ในขณะที่วนรอบรีสตาร์ทshตามความจำเป็น:

while /bin/true; do

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

done

อย่างไรก็ตามจะเกิดอะไรขึ้นหาก/bin/trueไม่ส่งคืนรหัสการออกเป็น 0 เสมอไป /binอยู่ในระบบไฟล์รูทแบบอ่านอย่างเดียว แต่ลีนุกซ์ให้เราเปลี่ยนสิ่งนั้นโดยใช้การเมาท์ "ผูก":

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 ดังนั้นฉันควรจะทดสอบในกล่องจริง)
Polynomial

4

GTB , 13 ตัวอักษร

ดำเนินการจากเครื่องคิดเลข TI-84

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

หาก RAM ส่วนใหญ่ไม่ว่างก็จะมีปัญหา ERR:MEMORY

มิฉะนั้น RAM ของเครื่องคิดเลขอุดตันจนปิดและลบล้างมัน

ตัวอย่างที่ดีของ "ไวรัสเครื่องคิดเลข"


ฉันเห็นเพียงแค่นี้ทำให้+, ++, ฯลฯ++++ Str0มันทำให้ฉันERR:MEMORYแต่พยายามที่จะแสดงStr0ค่าของฉันชน 84+ ของฉันทันที นอกจากนี้ยังทำให้ฉันสูญเสียโปรแกรมทั้งหมดของฉัน
LegionMammal978


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

ในเปลือกทุบตี

ฉันไม่แน่ใจว่านี่นับหรือไม่ แต่ถ้าคุณปล่อยให้ CPU ทำงานนานเกินไปและระบบล่มและมันจะทำการบู๊ตอย่างปลอดภัยโดยไม่เป็นอันตรายแน่นอนถ้าคุณทำตลอดเวลาจะมีความเสียหายของระบบ


6
มันไม่ได้ผลจริงๆ มันแค่หมุนซีพียูที่การใช้งาน 100% ซึ่งถูกทำให้ไร้ประโยชน์โดยระบบระบายความร้อนที่เหมาะสมครึ่งหนึ่ง ฉันใช้งาน Folding @ Home มาหลายเดือนด้วยการใช้งาน CPU 100% และไม่เคยมีปัญหากับเครื่องเลยแม้แต่น้อย
พหุนาม


2
@Optimus คุณอาจทิ้งมันไว้ที่นี่ - มันไม่ใช่คำตอบที่ถูกต้อง แต่มันก็ไม่ได้ทำอันตรายอะไรเลย ฉันคาดหวังว่าโซลูชัน Windows จะยากขึ้นเนื่องจาก Linux ช่วยให้คุณสามารถแยกสิ่งต่าง ๆ ได้หากคุณต้องการ
พหุนาม

2
@ โพลีโนเมียลฉันไม่คิดว่ามันเป็นเรื่องจริงลินุกซ์จะจัดทำเอกสารวิธีที่คุณสามารถทำลายมันได้ดีกว่า
หยุดหมุนทวนเข็มนาฬิกาเมื่อ

1
@leftaroundabout ฉันไม่เห็นด้วย Windows ได้รับการออกแบบมาตั้งแต่แรกจนถึงเพื่อป้องกันไม่ให้คุณเสียหายสถานะของระบบจากโหมดผู้ใช้และยังหยุดคุณจากการแก้ไขไฟล์ระบบที่สำคัญผ่านทาง Windows File Protection ไฟล์ระบบที่ถูกล็อค ฯลฯ Linux ได้รับการออกแบบ ในลักษณะที่ช่วยให้เกิดความเสถียรสูงสุดหากคุณไม่ลองยุ่งกับมัน แต่ถ้าคุณทำลงไปยุ่งกับมันคุณสามารถ ตัวอย่างเช่นฉันสามารถแก้ไข/dev/memหรือ/dev/kmemตามที่ฉันต้องการจากรูต
พหุนาม

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: overkill โดยเจตนา


2
get-process | stop-process -force

ใน PowerShell


1
"ไม่ใช่กฎที่ใช้เครื่องมือที่ได้รับการออกแบบมาโดยเฉพาะเพื่อให้เกิดความผิดพลาด แต่การทำเช่นนั้นไม่สร้างสรรค์มาก!"
John Dvorak

1

Linux ทุบตี

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

.

สุจริตฉันกลัวที่จะลองพวกนั้น


ไม่มีใครสังเกตเห็นว่าโปรแกรมหลังเป็นระเบิดวางระเบิดหรือไม่?
dorukayhan ต้องการให้โมนิก้าคืน

ใช่ฉันทำ. :() { : | : & }; :
NoOne อยู่ที่นี่

ทำไมไม่ลอง@0แทนC:\a.batล่ะ
Johannes Kuhn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.