在x86汇编程序中找到一个用于教育目的的最小自修改代码示例?

per*_*ror 2 x86 assembly self-modifying

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

我确实浏览了一下Web,但所有的例子要么过于复杂,要么就是不太明显.我可能错过了正确的去处,所以随时建议链接或代码.

Non*_*ric 6

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

; Intel syntax

.arch   i386
.text
start:
        xor     %eax, %eax
        mov     word ptr change, 0x9090
change: inc     %eax
        nop
        ret
Run Code Online (Sandbox Code Playgroud)

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