3

假设我有以下一组说明:

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

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

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

4

2 回答 2

4

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

00E79E05
+   58AE
--------
00E7F6B3
于 2013-10-14T17:37:36.230 回答
2

这是相当微不足道的,真的:

Origin = E79E00
Target = E7F6B3
Offset =   58AE

Target = Origin + Offset + 5 (5 being the size of the call instruction)
于 2013-10-14T17:38:56.377 回答