Assembly x86汇编调用指令编码

Assembly x86汇编调用指令编码,assembly,encoding,x86,Assembly,Encoding,X86,如何对指令近、绝对间接调用进行编码 call r/m32 它的操作码是FF/2,我知道/2是什么意思,但它如何影响二进制形式的编码?这是否意味着我们在ModR/M字节中将第二位设置为1?有谁能给我一个完整的例子,告诉我如何对一个近乎间接的呼叫进行编码吗?呼叫[0x12345678] 操作码=0xFF mod=00b,reg=010b,rm=101b所以modrm=0x15 disp32=0x12345678 因此,FF 15 78 56 34 12/2意味着modR/m字节仅使用mod和r

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

call r/m32

它的操作码是FF/2,我知道/2是什么意思,但它如何影响二进制形式的编码?这是否意味着我们在ModR/M字节中将第二位设置为1?有谁能给我一个完整的例子,告诉我如何对一个近乎间接的呼叫进行编码吗?

呼叫[0x12345678]

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

因此,
FF 15 78 56 34 12

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


reg字段的第二位,是。这不是modrm的第二位,而是第五位。@Jester-Hmm,好的。非常感谢你。
  ++++++++++++++++++++++++ 
  ||  Mod || Reg || R/M ||
  ++++++++++++++++++++++++
  ||  00  || 010 || 101 || = 15H
  ++++++++++++++++++++++++