虚拟机-如果我的malbolge程序只包含一条指令,内存应该填充什么?



根据1998年的原始规范,Ben Olmstead Malbolge VM使用对前两个单元的crazy op填充空内存单元。未初始化的单元格通过对前两个单元格重复执行op来设置。例如

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

为了理智起见,如果程序只包含一条指令,我该怎么办?

还是我应该假设最后一个字符总是EOF ?

从执行和语言律师的角度来看,有两种选择

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

  • 如果我们考虑[m] = crz [m-2], [m-1]的定义,它就变得有趣了。主要实现(以及大多数其他实现)使用unsigned short(或int)作为内存指针。当您尝试从1 (m-2)中减去2时,结果是0xffff,十进制65535(详细信息请参阅此答案),这只是稍微超过malbolge的59049内存限制。该故障在正常机器上运行(几乎)完美,使用0xffff单元进行疯狂操作计算(甚至不损害环境外内存!),但在有限内存或虚拟机上将失败。

    • 你可能最终与0xffffffff而不是0xffff,这取决于你使用指针的方式。

简而言之

  • 如果您手动运行,假定它失败
  • 如果你在虚拟机上运行它,它失败
  • 如果您在模拟器上运行它,它将可能工作,但将失败运行本身,因为0xffff是一个随机值的内存单元,导致随机值沿着环境内存。另一方面,您能从单字节malbolge程序中得到什么?

最新更新