该指令如何计算跳转目的地?

时间:2014-02-02 06:40:45

标签: assembly x86 disassembly

我想了解这条线正在做什么

   0x0000000000400f7e <+59>:    jmpq   *0x401be0(,%rax,8)

我们假设$ rax = 2.所以我们有* 0x401be0 +(8 * 2)。

* 0x401be0指向4198277.所以我们有4198277 + 16 = 4198293或0x400F95。

所以我期待代码跳转到0x400F95的指令。但它跳到0x400fc9。究竟发生了什么?

1 个答案:

答案 0 :(得分:2)

代码从地址0x401be0+8*rax的数据中读取64位值(代码地址)并跳转到读取的地址。