几个月前,我在手臂上纹了一个叉形炸弹,我跳过了空白,因为我觉得没有它们看起来更好.但令我沮丧的是,有时(并不总是)当我在shell中运行它时它不会启动一个fork炸弹,但它只是给出了一个语法错误.
bash: syntax error near unexpected token `{:'
Run Code Online (Sandbox Code Playgroud)
昨天它发生在我试图在朋友的Bash shell中运行它,然后我添加了空白,它突然工作,:(){ :|:& };:
而不是:(){:|:&};:
空白是否重要; 我的胳膊上有语法错误吗?!
它似乎总是在zsh中工作,但在Bash中不起作用.
一个相关的问题没有解释关于空白的任何事情,这确实是我的问题; 为什么Bash需要的空白能够正确解析它?
如果我可以写一个会破坏我的操作系统(而不是我的应用程序)的用户程序,我该怎么做?
我想以某种方式将我的usermode程序切换到内核模式并导致内存损坏.可能吗?
注意:我没有创建病毒.好奇而已.
我得到了这个常见版本的一般概念
:(){ :|:& };:
Run Code Online (Sandbox Code Playgroud)
bash fork炸弹的工作原理.
但是,我见过另一个版本(特别是针对bash)
#!/bin/bash
$0 &
$0 &
Run Code Online (Sandbox Code Playgroud)
在维基百科的叉炸弹文章和SO回答我上面提到的原始叉炸弹问题的封闭副本.
我正在寻找解释第二种(可能不常见的)叉式炸弹的工作方式.我已经用我目前对其作用的理解对下面的代码进行了评论,但我并没有真正了解它是如何以其他版本的bash fork炸弹的方式实现无限递归(可能是由于我对bash的理解不足)流程和背景).
#!/bin/bash # Specifies the location of the executable
# to use in executing this script.
$0 & # Duplicates (executes a new instance
# of) the current running process ('$0')
# (which would be the invocation of bash used
# to start running the script, right?)
# and background it ('&').
$0 & # Do the same …
Run Code Online (Sandbox Code Playgroud) 警告:恶意代码.不要试试这个.它出现在这里仅用于教育目的.
如果你在shell中输入这个shell片段,你的系统似乎停止了,你知道为什么吗?
:() { :|:& }; : #
Run Code Online (Sandbox Code Playgroud)
你唯一能做的就是重启你的系统..你能给我一些解释吗?
可能重复:
这个bash fork炸弹是如何工作的?
嗨,
快速提问.
这个shell命令如何工作以及为什么它的cpu使用率高达100%?
: ( ) { : | : & } ; :
Run Code Online (Sandbox Code Playgroud)