x86_64 相对 jmp 操作数

x86_64 relative jmp operand

我无法理解操作数 FE FC FF FF 的结果是 0x9e7080.

我对当前地址进行了一些运算sub/add,因为它应该是相对跳转,但结果仍然不等于0x9e7080.

instruction address | bytes | text form

L_009E737D | E9 FE FC FF FF | jmp 0x9e7080

需要考虑三件事:

  1. FEFCFFFF 以小端形式给出,表示 0xFFFFFCFE.
  2. 的十六进制值
  3. 此十六进制值经过符号扩展,因此为负数,十进制值为 -770
  4. 您还必须添加指令占用的字节数。

这导致 0x009E737D + 0xFFFFFCFE + 5 = 0x009e7080,等于 0x009E737D - 0x00000302 + 5 = 0x009e7080