花指令是一种防止程序被反汇编调试的手段。

种类

跳转到多字长指令的参数中

一般来说,反汇编器会按顺序进行反汇编,但是,如果程序跳转到多字长指令的参数中,反汇编的结果就会和实际情况不符。

示例(使用 6502 指令集,数字如无特殊说明均为十六进制
内存地址 0 1 2 3 4 5
机器码 4C 04 00 A9 A9 60
反汇编出的指令 JMP $0004 LDA #$A9 RTS
释义 跳转到地址 4 将 A9 载入累加器 子程序返回
实际执行的指令 JMP $0004 这里不会被执行 LDA #$60
释义 跳转到地址 4 将 60 载入累加器中

这个例子过于简单,是可以被调试器检测到的。实际应用的花指令比这个更复杂,含有条件跳转指令。

参见