根据'98 的原始规范,Ben Olmstead Malbolge VM 对先前的两个单元使用疯狂的操作来填充空的内存单元。“通过对前两个单元重复执行操作来设置未初始化的单元。” IE
[m] = crz [m-2], [m-1]
如果程序只包含 1 条指令,我应该怎么做?
或者我应该假设最后一个字符总是EOF
?
根据'98 的原始规范,Ben Olmstead Malbolge VM 对先前的两个单元使用疯狂的操作来填充空的内存单元。“通过对前两个单元重复执行操作来设置未初始化的单元。” IE
[m] = crz [m-2], [m-1]
如果程序只包含 1 条指令,我应该怎么做?
或者我应该假设最后一个字符总是EOF
?
从实施和语言律师来看,有两种选择 -
如果我们将“前两个单元格”的定义视为字面上的前两个单元格,那么单字符或空的 malbolge 程序在该语言中是非法的,因为它不能根据规范执行。
如果我们考虑 的定义[m] = crz [m-2], [m-1]
,它就会变得有趣。主要实现(可能与其余大部分一起)使用unsigned short
(或int
)作为内存指针。当您尝试2
从1
( m-2
) 中减去时,它会导致0xffff
, decimal 65535
(有关详细信息,请参阅此答案),这仅超出了 malbolge 的59049
内存限制。该故障(几乎)在普通机器上完美运行,使用0xffff
单元进行疯狂运算(甚至不会损害环境外内存!),但在有限内存或虚拟机上会失败。
0xffffffff
而不是。0xffff
简而言之,
0xffff
它是一个随机值的内存单元,导致环境内存中的随机值。另一方面,您对单字节恶意程序有什么期望?