4

根据'98 的原始规范,Ben Olmstead Malbolge VM 对先前的两个单元使用疯狂的操作来填充空的内存单元。“通过对前两个单元重复执行操作来设置未初始化的单元。” IE

[m] = crz [m-2], [m-1]

如果程序只包含 1 条指令,我应该怎么做?

或者我应该假设最后一个字符总是EOF

4

1 回答 1

2

从实施和语言律师来看,有两种选择 -

  • 如果我们将“前两个单元格”的定义视为字面上的前两个单元格,那么单字符或空的 malbolge 程序在该语言中是非法的,因为它不能根据规范执行。

  • 如果我们考虑 的定义[m] = crz [m-2], [m-1],它就会变得有趣。主要实现(可能与其余大部分一起)使用unsigned short(或int)作为内存指针。当您尝试21( m-2) 中减去时,它会导致0xffff, decimal 65535(有关详细信息,请参阅答案),这仅超出了 malbolge 的59049内存限制。该故障(几乎)在普通机器上完美运行,使用0xffff单元进行疯狂运算(甚至不会损害环境外内存!),但在有限内存或虚拟机上会失败。

    • 根据您使用指针的方式,您最终可能会得到0xffffffff而不是。0xffff

简而言之

  • 如果你手动运行它,假设它失败了
  • 如果你在虚拟机上运行它,它会失败
  • 如果你在模拟器上运行它,它可能会工作,但会失败运行本身,因为0xffff它是一个随机值的内存单元,导致环境内存中的随机值。另一方面,您对单字节恶意程序有什么期望?
于 2017-01-10T16:26:41.957 回答