我有一些机器代码如下: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
。
我错过什么了吗?给予我点提示。
1条答案
按热度按时间i7uq4tfw1#
这是一个 * 间接 * 跳转。r/m64是指针作为数据加载到RIP的操作数大小,而不是用于编码加载地址的字节数,也不是新RIP本身。
25
是对RIP相关寻址模式进行编码的ModRM,因此4个字节是[rip+rel32]
寻址模式的rel32
。查看https://defuse.ca/online-x86-assembler.htm#disassembly2或任何其他方便的方式将这些字节提供给反汇编程序:
参见