机器码跳转目的地计算

时间:2012-01-01 18:33:19

标签: machine-code

好的,所以我需要挂钩一个程序,但为了做到这一点,我将复制指令E8 <Pointer to Byte Array that contains other code>。这个问题是,当我汇编Call 0x100时,我得到E8 FD,我们知道E8是调用指令,所以FD必须是目的地,那么汇编器如何将目的地从0x100带入FD?谢谢,Bradley - Imcept

2 个答案:

答案 0 :(得分:3)

有大量的跳转/调用操作码,其中一些是相对的。我说你其实不是E8 FD而是E8 FD FFE8似乎是“调用16位相对”,0x100是默认放置指令的位置。

因此,您将call 0x100放在地址0x100处,生成的代码为“执行跳转指令,并从实际指令指针跳转-3”。 -3是因为移位是在读取指令之后的位置计算的,在E8 FD FF的情况下是0x103。这就是FD FF0xfffd的大端,即16位-3的转变。

答案 1 :(得分:0)

http://wwwcsif.cs.ucdavis.edu/~davis/50/8086 Opcodes.htm
E8是16位相对呼叫。因此,例如E8 00 10表示在PC + 0x1000处调用地址。