3

我正在寻找几行长的示例,演示 x86 汇编程序中的自修改代码,用于教育目的(不需要做一些有意义的事情,但需要清楚地编写自己的代码,然后在阅读代码本身时执行它)。

我确实浏览了一点网络,但所有的例子要么太复杂,要么就是不言自明。我可能错过了正确的去处,所以请随意建议链接或代码。

4

1 回答 1

6

许多处理器在更改代码后无法立即看到对代码的修改,而是执行旧字节。例如,下面的代码仍然(大多数时候)增加 eax,即使在 'inc' 指令被 'nop'-s 覆盖之后。您应该几乎总是看到 eax=1,如果在“mov”之后发生异常,则得到 eax=0。

; Intel syntax

.arch   i386
.text
start:
        xor     %eax, %eax
        mov     word ptr change, 0x9090
change: inc     %eax
        nop
        ret

如果 EFLAGS.TF=1 eax 将始终为 0。这是否有用是另一回事。很久以前,一位朋友使用自修改代码进行混淆,并且有几个上述陷阱,依赖于处理器实际上忽略了更改。

于 2012-08-29T17:56:28.167 回答