首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >挑战:编写一段退出自身的代码。

问挑战:编写一段退出自身的代码。
EN

Code Golf用户
提问于 2013-12-28 21:18:16
回答 77查看 9.2K关注 0票数 38

我在搜索(是吗?)一段立即退出的代码-以一种绝对非常规的方式。

这并不意味着:System.exit((int) 'A'); (Java)。

这可能意味着:

代码语言:javascript
复制
#!/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()

大多数被选中的答案都赢了!所有的语言所有的架构。

编辑:抛出异常退出将不再被接受!

EN

回答 77

Code Golf用户

回答已采纳

发布于 2013-12-28 21:22:26

bash,6个字符

代码语言:javascript
复制
exec [

exec用其他方法替换当前进程。[是我能找到的最短的命令,它是无害的(它是test的别名)

票数 43
EN

Code Golf用户

发布于 2013-12-31 14:18:53

Bash

代码语言:javascript
复制
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

-)尽可能快地终止程序;-)

票数 44
EN

Code Golf用户

发布于 2013-12-29 04:34:03

红码

(背景: Redcode是1984年A.K. Dewdney引入的核心战争编程游戏中使用的伪汇编语言。它通常大量使用自修改代码。几年前我写了一个不错的小红码编程教程。)

代码语言:javascript
复制
MOV 1, 0

这个单指令程序不仅杀死了自己,而且还从内存中删除了自己的程序代码,在内存中没有留下任何自身的痕迹。

你说无聊吗?毕竟,上面的程序无论如何都会死掉,即使它没有覆盖它的代码。好的,在最后擦拭自己和死亡之前,这里有一个把整个核心擦拭干净的方法:

代码语言:javascript
复制
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,尽管还有其他几个很好的模拟器。

票数 39
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/16527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档