x86 汇编 CALL 指令编码

问题描述 投票:0回答:2

如何对近、绝对间接调用指令进行编码?

call r/m32

它的操作码是 FF /2,我知道 /2 是什么意思,但是,它如何影响二进制形式的编码?这是否意味着我们将 ModR/M 字节中的第二位设置为 1?谁能给我一个关于如何编码近间接调用的完整示例?

assembly encoding x86
2个回答
3
投票

call [0x12345678]

  • 操作码 = 0xFF
  • mod = 00b,reg = 010b,rm = 101b 所以 modrm = 0x15
  • disp32 = 0x12345678

因此,

FF 15 78 56 34 12


2
投票

/2
表示
modR/m
Byte 仅使用
mod
r/m
字段。该指令只有一个操作数。它是一个 32 位位移值。因此,
mod = 00
r/m = 101
(仅位移模式) 并且
modR/m
字节的 reg 字段等于符号
/2
中的 2 的二进制形式(reg =
010
)。

模组 注册 R/M
00 010 101 = 15H
© www.soinside.com 2019 - 2024. All rights reserved.