关于机器码FF 25对应JMP指令操作数位数不符的技术疑问
x86 JMP指令机器码解析提示
- 纠正指令结构误解:
FF 25 CA 21 00 00里,FF是操作码,25是ModR/M字节,不属于操作数。你混淆了「指令携带的寻址偏移」和「指令要读取的目标地址操作数」。 - 拆解ModR/M字节
0x25(二进制00100101):- mod字段
00+ r/m字段101对应RIP相对寻址模式,计算方式为:目标内存地址 = 指令结束后的RIP值 + 符号扩展为64位的32位偏移量 - reg字段
100匹配FF /4,对应JMP r/m64指令
- mod字段
- JMP r/m64的定义是「从寄存器或指定内存位置读取64位值作为新的RIP」,而非指令直接携带64位立即数。这里的
CA 21 00 00是RIP的偏移量,用来找到存储64位目标地址的内存位置,而不是目标地址本身。 - 具体计算:该指令共6字节,所以指令结束后的RIP = 当前指令地址 + 6。将32位偏移
0x000021CA符号扩展为64位后与该RIP相加,得到的地址中存储的64位数据才是最终跳转的目标地址。
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

