assembly 机器码FF25应该有64位操作数,但实际上只有32位可用

qnzebej0  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(187)

我有一些机器代码如下:
FF 25 CA 21 00 00
我知道这是一个JMP的操作码,Op/En设置为M,这意味着后面有一个ModR/M字节。
0x25 =〉0x00100101,因此reg为0 b100,操作码实际为FF /4。然而,JMP操作码汇总表中唯一匹配的是:
FF /4 ---- JMP r/m64 ----近跳,绝对间接,RIP =寄存器或存储器的64位偏移
这意味着ModR/M字节后面的应该是一个64位操作数,但我只有一个32位操作数CA 21 00 00
我错过什么了吗?给予我点提示。

i7uq4tfw

i7uq4tfw1#

这是一个 * 间接 * 跳转。r/m64是指针作为数据加载到RIP的操作数大小,而不是用于编码加载地址的字节数,也不是新RIP本身。
25是对RIP相关寻址模式进行编码的ModRM,因此4个字节是[rip+rel32]寻址模式的rel32
查看https://defuse.ca/online-x86-assembler.htm#disassembly2或任何其他方便的方式将这些字节提供给反汇编程序:

ff 25 ca 21 00 00   jmp    QWORD PTR [rip+0x21ca]

参见

相关问题