x86_64相对jmp操作数

Kra*_*rab 0 assembly x86-64

我无法理解操作数如何FE FC FF FF导致0x9e7080.

我尝试了一些数学子/添加到当前地址,因为它应该是相对跳转,但结果仍然不等于0x9e7080.

instruction address | bytes | text form

L_009E737D | E9 FE FC FF FF | jmp 0x9e7080
Run Code Online (Sandbox Code Playgroud)

use*_*815 5

有三件事需要考虑:

  1. FEFCFFFF给出小端,表示十六进制值0xFFFFFCFE.
  2. 此十六进制值是符号扩展的,因此为十进制值为负-770.
  3. 您还必须添加指令所需的字节数.

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