Ölüm Kodu Golf [kapalı]


34

Bir BSOD veya çekirdek panikine neden olan bir kod yaz!

Kurallar:

  • Windows'ta bir BugCheck'e (Ölümün Mavi Ekranı), Linux'ta (veya diğer * nix sistemlerde) bir çekirdek panikine neden olmalısınız.
  • Sisteme zarar vermemelidir (yani yeniden başlatmaya çalışmalıdır)
  • Çekirdek modu sürücülerine izin verilir.
  • İşletim sisteminizi ve sürüm bilgilerinizi belirtin.
  • Kazanın neden olduğunu açıklayın.
  • Bir çökmeye neden olmak için özel olarak tasarlanmış araçları kullanmak kurallara aykırı değildir, ancak bunu yapmak çok yaratıcı değildir!
  • En yüksek yükseltmeler kazanır.

3
@urogen - Son kontrol ettiğimde 1/0denilen bir dosyayı koymak driver.cgeçerli bir çekirdek modu sürücüsü değil. Ne olursa olsun, kazanan kod uzunluğuna değil, artılara dayanıyor.
Polynomial

1
Son zamanlarda Meta Code Golf'ü takip etmedim - "en fazla oy alan" şimdi izin veriliyor mu? (Bu durumda, bu web sitesi 100x daha harika oldu!)
Ry-

1
@ minitech Bu objektif bir kriter, bu yüzden neden izin verilmemesi gerektiğini anlamıyorum.
Polynomial

2
@Polynomial Ben onu yeniledim ve cevapların neredeyse hepsi, harikalar ve topluluk gerçekten bu tür zorluklara izin verilmesini diliyor, ancak bu SE modeline uymuyor.
kedi,

4
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum, çünkü kurallarımızı ihlal eden kötü amaçlı kod gerektiriyor. meta.codegolf.stackexchange.com/a/4831/34718
mbomb007 7:16

Yanıtlar:


24

Bash, x86 Linux 2.6.20 çekirdeği

Uyarı: Aşağıdaki komut sisteminizde kalıcı hasara neden olabilir.

cat /dev/urandom > /dev/mem

Aşağıdaki çıktılar ( burada deneyin ). Bundan sonra, senaryo kilitleniyor.

/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

İşte aynı komutla bulunan başka bir istisna:

/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
Sanırım öyle. Büyük güç büyük sorumluluk getirir.
kopyalayın.

15
Sistem gereksinimine zarar vermemesi gerekenleri ihlal eder - yeterince çalıştırırsanız, sonunda disk sürücüsünü diski biçimlendiren kodla yeniden yazar.
ugoren

5
@ugoren Bu son derece düşük bir senaryo. Bu yazma diğerlerine doğru yerde olup doğru 32 bit adresleri ve talimatların bir demet yazmak zorunda kalacak
copy

9
"yeterince zaman çalıştırın, sonunda disk sürücüsünü diski biçimlendiren kodla yeniden yazar" - Kesin değil, urandom pseudorandom'dur.
skeevey

3
@ugoren "Sisteme zarar vermemelisiniz" kuralı sadece benzeri cevapları önlemek içindir sudo rm -Rf /. Bu yöntemi kullanarak sistemde kalıcı hasara neden olma ihtimali, örneğin, metnin karmaşına dayanan bir dizi şarkı sözünün çıktısını kaba zorlama olasılığından daha azdır.
Polinom

25

C, 16 karakter, P5 x86 için

main=-926478352;

F00F böceklerini hatırlıyor musunuz? Bu küçük programla günde bir ya da iki makineyi kilitlemeye yardım ettim. (Evet, o kadar zamandır golf oynuyorum.)

Kabul edildi, bunun tam olarak istendiği şey değildi ve sadece P5 Pentium yongalarının eski adımlarında çalışıyor. Ama kendi lehine, bu, çapraz platform var Linux hem çalışan ve Windows'un!


2
Kötü niyetli, değil mi?

9

QBASIC, 38 Karakterler

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

DOS'ta bir BSOD veya Kernel paniği tanımladığınızdan emin değilim, ancak bu muhtemelen oldukça yakın. Ekran çalıştığında ekran boşalır ve makine hiçbir şeye cevap verir, Ctrl + Alt + Delete bile değil. Makineyi tekrar çalıştırmak için donanımdan sıfırlama veya güç döngüsü ile yeniden başlatmanız gerekir. Bu VirtualBox altında DOS 6.22 üzerinde çalışıyor. Sistemin çökmesine neden tam olarak neden olduğundan emin değilim, ancak temelde program yazma işi olmadığını belleğe yazıyor (POKE).


2
Bunun çökmesinin nedeni, sistem program belleğini gereksiz yere yazmanızdır.
Polinom

Evet, bunu biliyordum ama biraz daha spesifik bir şeyler düşünüyordum. Hafızanın hangi bölümüne yazdığından bile emin değilim.
Kibbee

1
DOS kesme vektörlerinin ve COMMAND.COMdüşük bellek adreslerinde depolanan program kodunun üzerine yazıyorsunuz. Kaynak: img.tfd.com/cde/MEMMAP.GIF
Polynomial

8

sh (JSLinux'ta)

Linux, init işlemine sinyallere karşı özel koruma sağlar . Bununla birlikte, JSLinux’ta, /sbin/initdiğer ikili dosyaları çalıştıran bir kabuk betiği olduğunu farkettim (en sık bağlananlar /bin/busybox).

Bu "sonsuz" döngü shgerektiği gibi yeniden başlatılırken :

while /bin/true; do

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

done

Ancak, /bin/trueher zaman 0 çıkış kodunu döndürmezse ne olur ? /binsalt okunur kök dosya sisteminde, ancak Linux "bağlama" bağlarını kullanarak bunu değiştirmemize izin veriyor:

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

Ve anlıyoruz:

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

4

Linux'ta Bash, 27 karakter

echo c>/proc/sysrq-trigger

Veya sudo izinleriniz varsa:

echo c|sudo tee /proc/sysrq-trigger

1
Bu sh: can't create /proc/sysrq-trigger: nonexistent directorybenim için sonuçlanır . (Her ne kadar bu jsLinux'ta olsa da, muhtemelen gerçek bir kutu üzerinde test etmeliyim)
Polynomial

4

GTB , 13 karakter

TI-84 hesap makinesinden çalıştırıldı

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

RAM'in çoğu ücretsiz ise, kilitlenir ERR:MEMORY

Aksi halde, hesaplayıcının RAM'i o kadar tıkanır ki kapanır ve onu temizler.

Bir "hesap makinesi virüsü" harika örneği


Ben, bu sadece koyar bakın +, ++, ++++, vb Str0. Bana verdi ERR:MEMORY, ama Str0değerini göstermeye çalışırken anında 84+ düştü. Ayrıca, bu benim tüm programlarımı kaybetmeme neden oldu.
LegionMammal978


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

Bash kabuğunda,

Burada önemli olup olmadığından pek emin değilim, ancak yeterince ısınmasına ve sistemin çökmesine izin veriyorsanız ve zararsız bir şekilde güvenli bir şekilde yeniden başlatılmasını sağlarsanız, elbette her zaman bir miktar sistem hasarı oluşacaktır.


6
Bu gerçekten işe yaramıyor. Sadece CPU'yu% 100 kullanımda döndürür, bu da herhangi bir yarı-soğutma sistemi tarafından engellenir. % 100 CPU kullanımıyla aylarca @ Folding @ Home kullandım ve makineye hiç takılmadım.
Polinom


2
@Optimus Burada da bırakabilirsiniz - geçerli bir cevap değil, ancak zarar vermez. Aslında bir Windows çözümünün daha zor olmasını bekliyorum çünkü Linux gerçekten istemeniz durumunda işleri kırmanıza izin veriyor.
Polinom

2
@Polynomial Bunun doğru olduğunu sanmıyorum, Linux onu kırmanın yollarını daha iyi belgeliyor .
counterclockwis

1
@leftaroundabout Ben katılmıyorum. Windows, sistem durumuna kullanıcı modundan zarar vermenizi engellemek için sıfırdan tasarlanmıştır, ayrıca kritik öneme sahip sistem dosyalarını Windows Dosya Koruması, kilitli sistem dosyaları vb. İle değiştirmenize engel olur. Öte yandan Linux tasarlanmıştır. maksimum denge için izin verecek şekilde , eğer sen yok denemek onunla uğraşmak. Ama, eğer do onunla uğraşmak istiyorum, bunu yapabilirsiniz. Örneğin, kökten istediğim gibi değiştirebilir /dev/memya /dev/kmemda değiştirebilirim .
Polinom

2

Yakut (kök olarak çalıştır), 36 veya 40 karakter (eşleşmelere bağlı olarak /p*/s*r)

Http://www.kernel.org/doc/Documentation/sysrq.txt adresine bakın ve 'c'neden çalıştığını görmek için arama yapın (tırnak işaretleri dahil!).

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

EDIT: Eşleşen başka şeyler varsa, işe yarayan daha uzun sürüm /p*/s*r

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

2 EDIT: Kasıtlı olarak overkill.


2
get-process | stop-process -force

Powershell'de


1
“Bir kazaya neden olmak için özel olarak tasarlanmış araçları kullanmak kurallara aykırı değildir, ancak bunu yapmak çok yaratıcı değildir!”
John Dvorak

1

Linux bash

cat /dev/zero > /dev/mem

Tüm hafızayı temizleyin ve sonsuz bir çekirdek panikine neden olun.

Burada dene .


Bundan nasıl farklıdır bu ? s/zero/urandom/.
NoOneIsHere

@NoOneIsHere Çekirdek paniği bu sürümle asla bitmez ve burada hafıza rasgele baytlarla dolu değil, temizlenir.
TuxCrafting

0

Toplu, 15 bayt

:A
start
goto A

Sırf yukarı başlatarak doğrusal zamanda hafızayı taşıyor cmd.exeyüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce yüzlerce, yüzlerce, yüzlerce, yüzlerce ve yüzlerce kez.

Kendini tekrar tekrar tekrar başlatan , yani hafızaya logaritmik bir sürede taşan (yani RAM'inizi yükseltmek çökmeyi geciktirmez ) 24 bitlik bir program (ama muhtemelen rekabet etmeyen) var. Aşağıdaki kodun bulunduğu yerde olduğunu varsayalım C:\a.bat:

:A
start C:\a.bat
goto A

.

Açıkçası bunları denemekten korkuyorum.


İkinci programın bir çatal bomba olduğunu fark eden var mı?
dorukayhan, Monica'yı

Evet yaptım. :() { : | : & }; :
NoOneIsHere

neden @0yerine C:\a.bat?
Johannes Kuhn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.