IA-32 Architectures Software Developer Manual 2C 中缩写 E 和缩写 M 的区别
Posted
技术标签:
【中文标题】IA-32 Architectures Software Developer Manual 2C 中缩写 E 和缩写 M 的区别【英文标题】:Difference between abbr E and abbr M in IA-32 Architectures Software Developer Manual 2C 【发布时间】:2012-02-24 06:46:00 【问题描述】:我正在解码 X86 十六进制代码表示以返回汇编。 ISA manual 2C 的 A.2.1 节提供了寻址方法的缩写代码(第 A-2 页第 2C 页)。谁能解释一下abbr E和abbr M有什么区别?
E - ModR/M 字节跟在操作码之后并指定操作数。这 操作数是通用寄存器或内存地址。如果 它是一个内存地址,地址是从一个段计算的 寄存器和以下任何值:基址寄存器、索引 寄存器、比例因子、位移。
M - ModR/M 字节可能只涉及内存(例如,BOUND、LES、 LDS、LSS、LFS、LGS、CMPXCHG8B)。
【问题讨论】:
【参考方案1】:E 可以允许任何源或目标驻留在内存或寄存器中(例如MOV EAX, DWORD PTR DS:[ESI]
或MOV EAX, ESI
),而 M 只允许内存地址,这意味着它不能寻址寄存器,但它可以寻址内存由寄存器中的值指向(CMPXCHG8b ESI
无效,CMPXCHG8b QWORD PTR DS:[ESI]
有效)。
【讨论】:
以上是关于IA-32 Architectures Software Developer Manual 2C 中缩写 E 和缩写 M 的区别的主要内容,如果未能解决你的问题,请参考以下文章
《逆向工程核心原理》读书笔记——第4章 IA-32寄存器基本讲解