有可能用C编写一个自毁程序吗



是否可以用C编写一个程序,该程序在执行时删除自身(二进制文件),然后成功终止。如果是这样,最简单的方法是什么?

是。

#include <unistd.h>
int main(int argc, char* argv[])
{
  return unlink(argv[0]);
}

(已测试并工作。)

注意如果argv[0]不指向二进制文件(由调用程序重写),这将不起作用。类似地,如果通过符号链接运行,则符号链接(而不是二进制)将被删除。

此外,如果文件有多个硬链接,则只会删除调用的链接。

我不知道是否可以用一种真正独立于平台的方式方便地做到这一点,但您没有指定独立于平台,所以请尝试以下Linux风格的代码:

#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
    printf("Read carefully!  You cannot print this message again.n");
    return unlink(argv[0]);
}

这离你想要的有多近?

如果操作系统允许运行的程序删除自己的二进制文件,则只需查找API进行文件删除,或执行相应的system()命令。

如果操作系统不允许这样做,您的程序(我们称之为A)可以构造另一个二进制文件,其中包含另一个程序(我们将其称为b将立即退出。

如果a仍在运行,程序b将有一个单独的循环检查,并且一旦a退出,b就会擦除a的二进制文件。

您可以尝试只删除程序中的可执行文件(FILE*等)。。。但是,由于可执行文件是正在运行的,所以它可能不起作用。我觉得这就像吃自己,据我所知,这是不可能的,但你当然可以用我上面提到的方法试一试。

我认为这取决于您使用的平台。基本上,一旦加载了可执行文件,对二进制文件的任何后续更改都不会影响正在运行的程序。在Unix中,情况就是这样,您可以使用取消链接的系统调用。

我不确定这在Windows上是否正确。可能不允许删除可执行映像。您可以在Windows中尝试DeleteFile()api。

相关内容

  • 没有找到相关文章

最新更新