【问题标题】:Imprecision of ASM jump instructions observed in debugger在调试器中观察到 ASM 跳转指令的不精确性
【发布时间】:2015-05-16 23:40:32
【问题描述】:

我正在对 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 点关闭。

这是怎么回事?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这样就可以解释了。非常感谢!
    • @AK-33 标准的基本 CPU 获取/执行周期是 (1) 从 IP 获取指令(n 字节),(2) 将 IP 增加 n 字节,(3) 执行指令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多