跳转指令后的十六进制数字如何转换为存储器地址?

时间:2019-04-09 03:42:12

标签: pointers assembly x86-64 memory-address

我的代码反汇编中包含以下内容: image of disassembly

我看到了跳转指令代码E9,但是E9之后的数字如何转换为所示的内存地址?

1 个答案:

答案 0 :(得分:3)

指令中的字节是一个偏移量,将其添加到下一条指令的地址中以获取目标地址。

7ffbdba881c5 + 2ab125ff = 7ffc0659a7c4

有关跳转编码的其他信息

与指令中目标位置的近跳转始终使用相对于下一条指令地址的带符号偏移进行编码。在32或64位模式下,偏移量可以为8或32位。 (在16位模式下,它可以是8位或16位。具有8位偏移量的近跳转也称为短跳转。)间接近跳转在寄存器或存储器位置中具有目标地址;它的目的是使目标地址位于寄存器或存储器位置。目的地是绝对的(要加载到[ER] IP的值)。

远距离跳转可以在指令中或在存储位置中找到目标;目的地同时具有CS和[ER] IP值。

有关更多详细信息,请参阅x86指令参考,例如Intel SDM,第2卷。https://software.intel.com/en-us/articles/intel-sdm