X86编码近呼叫相对偏移量

时间:2013-10-14 17:23:27

标签: x86 disassembly

假设我有以下一套说明:

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

如何编码来自近程调用(0xE8)的rel32偏移量,以便我可以得到 我可以跳到绝对位置吗?

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

这真是微不足道,真的:

Origin = E79E00
Target = E7F6B3
Offset =   58AE

Target = Origin + Offset + 5 (5 being the size of the call instruction)