7

根据DCPU 规范SET,指令失败的唯一情况是该a值是文字。

那么下面的工作吗?

SET [PC],0x1000

一个更有用的版本是设置一个偏移量PC,所以一个相当奇怪的无限循环将是:

SET [PC+0x2],0x89C3 ; = SUB PC,0x2
4

2 回答 2

7

可能(=我认为它应该有效,但我没有尝试)。

这被称为“自我修改”代码,并且在 8 位时代非常普遍,因为 a) 有限的 RAM 和 b) 有限的代码大小。像这样的代码非常强大但容易出错。如果您的代码库增长,这很快就会成为维护的噩梦。

著名用例:

  1. Windows 95 使用这样的代码在堆栈上构建图形渲染代码。
  2. 病毒和木马将其用作攻击媒介(在堆栈上编写代码或操纵返回地址以模拟 a JMP
  3. 在 C64 上模拟 switch 语句
于 2012-04-05T15:32:59.757 回答
4

[PC] 没有任何价值,所以我猜你需要通过将 PC 存储在可以用作指针(注册表或内存)的东西中来以一种迂回的方式来做到这一点。

        套装A
        设置 [A+3], 0x8dc3 ; SUB PC, 3(如果 A 不能从 SUB PC 外部更改,2 也可以。)
于 2012-04-05T17:24:29.313 回答