死亡代码高尔夫[关闭]


34

写一些导致BSOD或内核崩溃的代码!

规则:

  • 在Windows上,必须引起BugCheck(蓝屏死机),在Linux(或其他* nix系统)上,必须引起内核崩溃。
  • 不得损坏系统(即重新启动后可以正常工作)
  • 允许使用内核模式驱动程序。
  • 陈述您的操作系统和版本信息。
  • 说明崩溃的原因。
  • 使用专门设计导致崩溃的工具并不违反规则,但是这样做并不是很有创意!
  • 最高投票获胜。

3
@urogen-上次我检查时,放入1/0名为的文件driver.c并不构成有效的内核模式驱动程序。无论如何,获胜者是基于投票,而不是代码长度。
多项式2012年

1
我最近没有关注过Meta Code Golf-现在允许“最高投票”吗?(如果是这种情况,则该网站的功能
才能再提高

1
@minitech这是一个客观标准,所以我不明白为什么不应该这样做。
多项式2012年

2
@Polynomial我赞成它,几乎所有的答案都很棒,社区真的希望这些挑战可以被允许,但这与SE模型不符。

4
我投票结束这个问题是离题的,因为它需要恶意代码,这违反了我们的规则。meta.codegolf.stackexchange.com/a/4831/34718
mbomb007 '16

Answers:


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 2012年

5
@ugoren这是不可能的情况。它必须在正确的位置编写一堆准确的32位地址和指令,而不能覆盖其他地址和指令
复制

9
“运行足够的时间,它将最终使用格式化磁盘的代码重写磁盘驱动器”-不确定,urandom是伪随机的。
skeevey 2012年

3
@ugoren“不得损坏系统”规则只是为了防止类似的回答sudo rm -Rf /。使用这种方法对系统造成永久性损害的机会小于,例如,基于文本哈希值强行强制输出一组歌曲歌词的机会。
多项式2012年

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

不知道如何在DOS中定义BSOD或内核恐慌,但这可能非常接近。运行时,屏幕仅变黑,并且机器不响应,甚至没有按Ctrl + Alt + Delete。您必须通过硬重置或关机后重启才能使机器再次运行。它在VirtualBox下的DOS 6.22上运行。不确定为什么会导致系统崩溃,但是基本上,程序正在将(POKE)写入没有业务写入的内存。


2
它崩溃的原因是因为您正在用垃圾覆盖系统程序内存。
多项式2012年

是的,我知道,但是我在想些更具体的事情。我什至不知道它要写入内存的哪一部分。
Kibbee 2012年

1
您正在覆盖COMMAND.COM存储在低内存地址中的DOS中断向量和程序代码。资料来源:img.tfd.com/cde/MEMMAP.GIF
多项式

8

sh(在JSLinux中)

Linux为init进程提供了针对信号的特殊保护。但是,我注意到在JSLinux中,它/sbin/init是一个执行其他二进制文件的shell脚本(大多数符号链接到/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中,所以我可能应该在真实的盒子上进行测试)
多项式

4

GTB,13个字符

从TI-84计算器执行

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

如果大部分RAM可用,它将崩溃, ERR:MEMORY

否则,计算器的RAM会被阻塞,以至于它会关闭并清除。

“计算器病毒”的一个很好的例子


我看,这只是把+++++++等,Str0。它给了我ERR:MEMORY,但是试图显示Str0的价值却立即使我的84岁以上的人丧生。另外,这使我失去了所有程序。
LegionMammal978


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

在bash外壳中,

我不确定这是否有用,但是如果让它运行足够长的CPU过热和系统崩溃,并且它确实可以安全重启,而不会造成损害,当然,如果一直这样做,将会对系统造成一定的损害。


6
这实际上是行不通的。它只会以100%的使用率旋转CPU,而任何半个体面的冷却系统都无法使用它。我已经以100%的CPU使用率运行了Folding @ Home数月,从来没有机器停顿过。
多项式2012年


2
@Optimus您最好将其保留在此处-这不是有效的答案,但不会造成任何危害。我实际上希望Windows解决方案会更困难,因为Linux允许您在确实需要的情况下破坏工作。
多项式2012年

2
@Polynomial我认为这不是真的,Linux只能更好地记录破坏它的方法。
停止转向逆时针

1
@leftaroundabout我不同意。Windows是从头开始设计的,旨在主动防止您从用户模式破坏系统状态,并且还阻止您通过Windows File Protection,锁定的系统文件等修改关键的系统文件。另一方面,Linux被设计为的方式,可以最大限度的稳定性,如果你不尝试惹它。但是,如果您确实想弄乱它,可以。例如,我可以修改/dev/mem/dev/kmem根据需要从根目录进行修改。
多项式2012年

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:故意过大。


2
get-process | stop-process -force

在PowerShell中


1
“使用专门设计来导致崩溃的工具并不违反规则,但是这样做并不是很有创意!”
约翰·德沃夏克

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

老实说,我怕尝试一下。


有人注意到后一个程序是叉子炸弹吗?
dorukayhan希望Monica退回

是的,我做到了。:() { : | : & }; :
NoOneIsHere

为什么不@0代替C:\a.bat呢?
约翰内斯·库恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.