跳转指令后的十六进制数如何转换为内存地址?
How do the hex numbers after a jump instruction translate into a memory address?
我的代码反汇编中有这个:
我看到了跳转指令代码E9,但是E9后面的数字怎么翻译成显示的内存地址呢?
指令中的字节是一个偏移量,添加到下一条指令的地址以获得目标地址。
7ffbdba881c5 + 2ab125ff = 7ffc0659a7c4
关于跳转编码的附加信息
在指令中带有目标的近跳转总是使用相对于下一条指令地址的有符号偏移量进行编码。在 32 或 64 位模式下,偏移量可以是 8 位或 32 位。 (在 16 位模式下,它可以是 8 位或 16 位。具有 8 位偏移量的近跳转也称为短跳转。)间接近跳转的目标地址在寄存器或内存位置;目的地是绝对的(要加载到 [ER]IP 的值)。
远跳转的目的地可以在指令中,也可以在内存位置;目的地同时具有 CS 和 [ER]IP 值。
有关详细信息,请参阅 x86 指令参考,例如英特尔 SDM,第 2 卷。https://software.intel.com/en-us/articles/intel-sdm
我的代码反汇编中有这个:
我看到了跳转指令代码E9,但是E9后面的数字怎么翻译成显示的内存地址呢?
指令中的字节是一个偏移量,添加到下一条指令的地址以获得目标地址。
7ffbdba881c5 + 2ab125ff = 7ffc0659a7c4
关于跳转编码的附加信息
在指令中带有目标的近跳转总是使用相对于下一条指令地址的有符号偏移量进行编码。在 32 或 64 位模式下,偏移量可以是 8 位或 32 位。 (在 16 位模式下,它可以是 8 位或 16 位。具有 8 位偏移量的近跳转也称为短跳转。)间接近跳转的目标地址在寄存器或内存位置;目的地是绝对的(要加载到 [ER]IP 的值)。
远跳转的目的地可以在指令中,也可以在内存位置;目的地同时具有 CS 和 [ER]IP 值。
有关详细信息,请参阅 x86 指令参考,例如英特尔 SDM,第 2 卷。https://software.intel.com/en-us/articles/intel-sdm