【问题标题】:What does the /4 mean in FF /4?FF /4 中的 /4 是什么意思?
【发布时间】:2014-08-09 08:01:14
【问题描述】:

commonly refer to 用于 x86 文档的一个站点有一些带有斜线和数字的指令代码。例如,jmp 接近绝对间接给出FF /4,而jmp 远绝对间接给出FF /5

/4/5 是什么意思?

为了运行一个快速的小测试,我附加了一个 32 位进程,分配了一些内存,并让汇编程序插入 jmp dword ptr[0x12345678];生成的字节码是FF 25 78563412。我了解地址字节序,但25/4/5 有什么关系?

我的猜测是我生成了一个jmp far,/5 意味着有五个字节作为参数(4 个字节用于地址 + 1 个字节用于25)。我仍然对25 的来源感到困惑。

【问题讨论】:

  • 4 或 5 是指令第二个字节 (modrm) 中 3 位字段的值。
  • 您应该参考英特尔官方文档。正如伊戈尔所引用的那样,甚至有解释,而且它也是官方的;)
  • @Jester 我认为官方英特尔文档中没有快速答案,它可能存在于大量解释中,但不值得花那么多时间去查找。因此,堆栈溢出是有好处的。对于初学者或只想要特定答案的人来说,查找所有文档没有多大意义。有时人们也需要一点指导/帮助,你不能给人们一个 500 页的文档并告诉他们只搜索一个问题,如果问其他人花费的时间要少得多

标签: assembly x86 machine-code opcode


【解决方案1】:

来自英特尔参考手册,“3.1.1.1 指令摘要表中的操作码列”部分:

  • /digit — 0 到 7 之间的数字表示 ModR/M 字节的 指令仅使用 r/m(寄存器或内存)操作数。注册字段 包含提供指令操作码扩展的数字。
  • /r — 表示指令的 ModR/M 字节包含一个寄存器 操作数和一个 r/m 操作数。

ModR/M 字节的各种描述中也经常提到这个符号,e.g.

【讨论】:

  • 注意:示例中的25是ModR/M字节。
  • 哇哦!那个链接是金色的!所以它肯定一个近乎跳跃的。
  • 我唯一有理解问题的是if PM64 and adsize=32, then effective address = [EIP+sdword] - PM64 是什么?快速的谷歌搜索给出了惨淡的答案。
  • 多年后,终于挖到:PM64指的是“处理器模式64”,或“长模式”。应该是足够的起点。
猜你喜欢
  • 2015-08-11
  • 2018-07-17
  • 2018-04-02
  • 2012-07-31
  • 2019-12-22
  • 2020-07-05
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多