You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86汇编JMP指令偏移计算求助:公式理解与计算错误问题

x86 E9 相对跳转偏移的正确计算方法

核心原理

E9 是x86架构下的4字节相对偏移近跳转指令,总长度为5字节(1字节操作码 E9 + 4字节有符号偏移值)。这个偏移值是相对于JMP指令的下一条指令地址计算的,而非JMP指令本身的地址。

正确计算公式

设:

  • FROM = JMP指令的起始地址(你的案例中为 0x0057A3FF)
  • TO = 目标跳转地址(你的案例中为 0x00899FE8)
  • 下一条指令地址 = FROM + 5(因为E9指令占5字节)

相对偏移值的计算公式为:

偏移值 = TO - (FROM + 5)

计算结果是32位有符号整数,最终要转成小端序的4字节机器码,拼在 E9 之后。

你的案例分步计算

  1. 计算下一条指令地址:
    0x0057A3FF + 5 = 0x0057A404
    
  2. 计算偏移值:
    0x00899FE8 - 0x0057A404 = 0x0031FBE4
    
  3. 转成小端序机器码:0xE4 0xFB 0x31 0x00
  4. 完整JMP机器码:E9 E4 FB 31 00

纠正你的错误点

  • 公式方向搞反:应该是目标地址 - 下一条指令地址,不是 FROM - TO
  • 错误操作:你减去了操作码的十六进制值 E9,实际要减的是指令长度(十进制5),这是完全不同的概念。

验证逻辑

CPU执行时,会把下一条指令地址加上偏移值:

0x0057A404 + 0x31FBE4 = 0x00899FE8

结果正好是目标地址,跳转生效。


内容的提问来源于stack exchange,提问作者Вили Били

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:35:33