【问题标题】:X86 encode near call relative offsetX86 编码近调用相对偏移量
【发布时间】:2013-10-14 17:23:26
【问题描述】:

假设我有以下一组说明:

00E79E00  | E8 AE580000   CALL    someprocess.00E7F6B3
00E79E05  | 85C0          TEST    EAX, EAX
(output taken from OllyDbg)

如何对近调用(0xE8)的 rel32 偏移进行编码,以便获得 我可以跳转到的绝对位置?

我知道偏移量是相对于下一条指令的,是用它减去目标来计算的。我的问题是:我如何“反转”这个,所以我从相对偏移量 AE580000 得到函数地址 00E7F6B3

【问题讨论】:

    标签: assembly x86 disassembly machine-code


    【解决方案1】:

    您只需获取下一条指令的地址 (00E79E05) 并添加指令的 32 位带符号偏移量(58AE,little endian,还记得吗?)

    00E79E05
    +   58AE
    --------
    00E7F6B3
    

    【讨论】:

    • 非常感谢,现在一切都说得通了!我现在觉得自己真的很蠢——似乎字节序对我来说是个问题。
    【解决方案2】:

    真的很简单:

    Origin = E79E00
    Target = E7F6B3
    Offset =   58AE
    
    Target = Origin + Offset + 5 (5 being the size of the call instruction)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2020-04-16
      相关资源
      最近更新 更多