我在搜索(是吗?)一段立即退出的代码-以一种绝对非常规的方式。
这并不意味着:System.exit((int) 'A'); (Java)。
这可能意味着:
#!/usr/bin/env python3
# NOTE: This kills ALL RUNNING Python processes. Be careful!
def exit():
import os
os.system("killall python3")
# Windows addon
os.system("taskkill /im python.exe /f")
exit()大多数被选中的答案都赢了!所有的语言所有的架构。
编辑:抛出异常退出将不再被接受!
发布于 2013-12-28 21:22:26
exec [exec用其他方法替换当前进程。[是我能找到的最短的命令,它是无害的(它是test的别名)
发布于 2013-12-31 14:18:53
echo "Turn off your computer or i'll wipe your harddrive..."
echo 3;sleep 1
echo 2;sleep 1
echo 1;sleep 1
dd if=/dev/random of=/dev/hda-)尽可能快地终止程序;-)
发布于 2013-12-29 04:34:03
(背景: Redcode是1984年A.K. Dewdney引入的核心战争编程游戏中使用的伪汇编语言。它通常大量使用自修改代码。几年前我写了一个不错的小红码编程教程。)
MOV 1, 0这个单指令程序不仅杀死了自己,而且还从内存中删除了自己的程序代码,在内存中没有留下任何自身的痕迹。
你说无聊吗?毕竟,上面的程序无论如何都会死掉,即使它没有覆盖它的代码。好的,在最后擦拭自己和死亡之前,这里有一个把整个核心擦拭干净的方法:
loop: MOV ptr+1, >ptr
JMN loop, loop
SPL 1
SPL 1
MOV ptr+1, >ptr
ptr: DAT 0, 1前两个指令实际上完成了大部分工作:它只是一个简单的复制/跳转循环,它在程序结束后将空白指令单元格(初始化为DAT 0, 0)复制到每个后续单元格(使用增量后的间接寻址模式>),直到指针最终环绕到内存的开头,并在循环本身中覆盖MOV。一旦发生这种情况,JMN (JuMp,如果不是零)就会检测到它并掉线。
问题是,这仍然使JMN本身无法消除。为了摆脱它,我们需要另一个MOV来擦除JMN.但这意味着我们还需要另一个MOV来擦除那个MOV,等等。为了使整个程序消失无迹,我们必须以某种方式安排一条MOV指令来擦除自身和至少一条其他指令。
这就是SPL出现的地方--它是Redcode中最奇怪的操作码之一。基本上,这是一个“双向分科”的指令。您可以看到,与任何普通CPU一样,Redcode VM有一个“进程队列”:一个指向要执行的指令的指针循环列表,而不是简单的“程序计数器”寄存器。通常,在每个循环中,一个指令指针从队列的头移开,执行指令,下一个指令(除非有跳转或非法指令)被推到队列的尾部。但是SPL导致将下一个指令和给定的目标指令(在SPL 1情况下也是下一个指令)推送到队列中。
这一切的结果是,在执行了两个SPL 1指令之后,队列中现在有四个进程,全部是关于执行最后一个MOV的。这足以擦除JMN,包括SPLs和MOV本身,它还将ptr指令单元格作为DAT 0, 0 --与其周围的空核无法区分。
(或者,我们可以将ptr指令替换为MOV 1, 1,之前的指令会将其转换为MOV 1, 0,因此就会像上面的第一个程序那样擦除自己。)
Ps。如果您想测试这些程序,请下载一个红码模拟器 (a.k.a )。火星)。我推荐CoreWin或者是值得尊敬的pMARS,尽管还有其他几个很好的模拟器。
https://codegolf.stackexchange.com/questions/16527
复制相似问题