调试器中观察到的ASM跳转指令不精确

时间:2015-03-14 14:29:55

标签: assembly x86 reverse-engineering machine-code ollydbg

我正在对OllyDbg中的应用程序进行一些内联​​修改,并注意到一些奇怪的行为。

这些是我写的指令,直接从调试器中复制:

2005FE35   4C               DEC ESP
2005FE36   77 21            JA SHORT 2005FE59 ; 23 byte difference

要清楚,我只修改了操作码(4C 77 21);其他一切都由OllyDbg自动解释,这就是我的困惑。该指令应该递减ESP寄存器,然后执行21个十六进制字节的条件跳转。但是,地址0x2005FE59和0x2005FE36之间的差异不是21 - 它是23!

使用21个十六进制字节值,我观察到看似不稳定的结果。

2005FE36   77 20            JA SHORT 2005FE58 ; 22 byte difference
2005FE36   77 19            JA SHORT 2005FE51 ; 1B byte difference
2005FE36   77 17            JA SHORT 2005FE4F ; 19 byte difference

我指示向前跳转的十六进制字节数与地址偏移量不匹配;好像总是在2点之前。

这里发生了什么?

1 个答案:

答案 0 :(得分:6)

在读取指令后执行跳转(或任何指令),并且IP按指令的大小(2个字节)递增,因此跳转相对于2005FE38