コードゴルフオブデス[終了]


34

BSODまたはカーネルパニックを引き起こすコードを記述してください!

ルール:

  • Windowsでは、BugCheck(死のブルースクリーン)を発生させる必要があり、Linux(または他の* nixシステム)では、カーネルパニックを発生させる必要があります。
  • システムに損傷を与えてはなりません(つまり、再起動時に機能するはずです)
  • カーネルモードドライバーが許可されます。
  • OSとバージョン情報を記載します。
  • クラッシュの原因を説明します。
  • クラッシュを引き起こすように特別に設計されたツールを使用することは規則に反しませんが、そうすることはあまり創造的ではありません!
  • 最高の賛成票が勝ちます。

3
@urogen-前回チェックしたとき、1/0呼び出されたファイルを入れることはdriver.c、有効なカーネルモードドライバーを構成していません。とにかく、勝者はコードの長さではなく、賛成票に基づいています。
多項式

1
最近Meta Code Golfをフォローしていません-「最高の支持」が許可されていますか?(これに該当する場合、このWebサイトは100倍も素晴らしいものになりました!)
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
違反システムに損傷を与えてはいけません要件を-あなたは十分な時間を、それを実行した場合、それは最終的にディスクをフォーマットするコードとディスクドライバを書き換えます。
ウゴレン

5
@ugorenこれは非常にありそうもないシナリオです。正確な32ビットアドレスと命令の束を適切な場所に書き込み、他の
コピーします

9
「十分な回数実行すると、最終的にはディスクをフォーマットするコードでディスクドライバーが書き換えられます」-urandomは擬似ランダムです。
skeevey

3
@ugoren「システムに損害を与えてはならない」ルールは、のような回答を防ぐためだけsudo rm -Rf /です。この方法を使用してシステムに永続的なダメージを与える可能性は、テキストのハッシュに基づいて一連の歌の歌詞の出力を強引に強制する可能性よりも低くなります。
多項式

25

C、16文字、P5 x86用

main=-926478352;

F00Fのバグを覚えていますか?この小さなプログラムで、1日または2台のマシンをロックアップするのを手伝いました。(はい、私はその間ゴルフをしていました。)

確かに、それは要求されたものではなく、P5 Pentiumチップの古いステッピングでのみ機能します。しかし、そのおかげで、Linux Windowsの両方で動作するクロスプラットフォームです!


2
悪意がありますよね?

9

QBASIC、38文字

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

DOSでBSODまたはカーネルパニックをどのように定義するかはわかりませんが、これはおそらくかなり近いでしょう。実行すると、画面は空白になり、マシンは何も応答せず、Ctrl + Alt + Deleteでさえ応答しません。ハードリセットまたはパワーサイクルで再起動して、マシンを再び動作させる必要があります。これは、VirtualBoxの下でDOS 6.22で実行されています。なぜシステムがクラッシュするのか正確にはわかりませんが、基本的にプログラムはビジネス書き込みのないメモリに書き込み(POKE)しています。


2
クラッシュする理由は、システムプログラムメモリをジャンクで上書きしているためです。
多項式

ええ、それは知っていましたが、もう少し具体的なことを考えていました。メモリのどの部分に書き込みを行っているのかさえわかりません。
キブビー

1
COMMAND.COM低メモリアドレスに保存されているDOS割り込みベクトルとプログラムコードを上書きしています。出典:img.tfd.com/cde/MEMMAP.GIF
多項式

8

sh(JSLinuxの場合)

Linuxは、initプロセスにシグナルに対する特別な保護を与えます。ただし、JSLinuxでは、/sbin/init他のバイナリ(ほとんどがにリンクされている/bin/busybox)を実行するシェルスクリプトであることに気付きました。

この「無限」whileループはsh、必要に応じて再起動します。

while /bin/true; do

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

done

ただし、/bin/true常に終了コード0が返されない場合はどうなりますか?/binは読み取り専用のルートファイルシステム上にありますが、Linuxでは「バインド」マウントを使用してこれを変更できます。

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

LinuxでのBash、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:MEMORYStr0の値を表示しようとするとすぐに84+がクラッシュしました。また、これによりプログラムがすべて失われました。
LegionMammal978


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

bashシェルでは、

これがここでカウントされるかどうかはわかりませんが、CPUの過熱とシステムクラッシュを十分に長く実行し、無害で安全に再起動する場合はもちろん、常にそれを行うと、システムに何らかの損傷が発生します。


6
これは実際には機能しません。CPUを100%の使用率で回転させるだけで、半分まともな冷却システムによって無効にされます。私はFolding @ HomeをCPU使用率100%で何ヶ月も実行しましたが、マシンが途切れることさえありませんでした。
多項式


2
@Optimusここに置いておくのもいいかもしれません-有効な答えではありませんが、害はありません。Linuxを使用すると、本当に必要に応じて物事を壊すことができるため、実際にはWindowsソリューションの方が難しいと考えています。
多項式

2
@Polynomial私はそれが本当だとは思わない、Linuxはあなたがそれを破る方法をより良く文書化するだけだ。
counterclockwis回すのをやめ

1
@leftaroundabout私は同意しません。Windowsは、ユーザーモードからのシステム状態の損傷を積極的に防ぐためにゼロから設計されており、Windowsファイル保護、ロックされたシステムファイルなどを介して重要なシステムファイルを変更することも防ぎます。あなたがそれを台無しにしようとしない場合、最大の安定性を可能にする方法で。しかし、もしあなたそれをいじりたければ、できます。たとえば、ルートから必要に応じて変更できます。/dev/mem/dev/kmem
多項式

2

Ruby(ルートとして実行)、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:意図的にやり過ぎ。


2
get-process | stop-process -force

PowerShellで


1
「クラッシュを引き起こすように特別に設計されたツールを使用することは規則に反しませんが、そうすることはあまり創造的ではありません!」
ジョンドボラック14年

1

Linux bash

cat /dev/zero > /dev/mem

メモリ全体をクリアし、無限カーネルパニックを引き起こします。

ここで試してみてください


これとこれはどのくらい違いますか?s/zero/urandom/
-NoOneIsHere

@NoOneIsHereこのバージョンではカーネルパニックは決して止まりません。ここでは、ランダムバイトで満たされるのではなく、メモリがクリアされます。
TuxCrafting

0

バッチ、15バイト

:A
start
goto A

単に起動して線形時間でメモリをオーバーフローcmd.exe何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百と何百、何百、何百、何百、何百回も。

致命(おそらく非競合)24バイトのプログラムが起動することがあります自体ので(つまり、あなたのRAMをアップグレードすると、クラッシュを遅らせることはありません)対数時間でメモリを溢れ、何度も繰り返し。次のコードがにあるとしC:\a.batます:

:A
start C:\a.bat
goto A

正直なところ、私はそれらを試してみるのが怖いです。


後者のプログラムがフォークボムであることに気づいた人はいませんか?
ドルカハンはモニカを

はい、しました。:() { : | : & }; :
-NoOneIsHere

なぜでは@0なくC:\a.bat
ヨハネ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.