cmp %eax,0x80498d4(,%ebx,4) 是啥意思?

Posted

技术标签:

【中文标题】cmp %eax,0x80498d4(,%ebx,4) 是啥意思?【英文标题】:What does cmp %eax,0x80498d4(,%ebx,4) mean?cmp %eax,0x80498d4(,%ebx,4) 是什么意思? 【发布时间】:2015-03-02 02:52:21 【问题描述】:

我知道还有一些与此类似的其他问题,但我仍然无法理解其中的 () 部分。有人可以为我拼出这个语法吗?谢谢。

【问题讨论】:

用 Intel 语法会更容易理解:cmp [ebx*4 + 0x80498d4], eax 【参考方案1】:
cmp %eax,0x80498d4(,%ebx,4)

cmp 是比较汇编指令。它通过从左边减去右边的参数来执行两个参数之间的比较,并设置一个 CPU EFLAGS 寄存器。然后可以使用这个 EFLAGS 寄存器进行条件分支/移动等。

第一个参数: `%eax(%eax 寄存器中的值)

第二个参数: 0x80498d4(,%ebx,4)。这读作offset ( base, index, scale ) 在您的示例中,第二个参数的值是内存位置偏移量0x80498d4 + base (which I believe defaults to zero if not included) + value in %ebx register * 4 (scaling factor)

注意:我认为这里的 base 是空的,默认值为 0。

您可以查看http://docs.oracle.com/cd/E19120-01/open.solaris/817-5477/ennby/index.html,了解有关 Intel x86 汇编指令语法的更多信息。

【讨论】:

以上是关于cmp %eax,0x80498d4(,%ebx,4) 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

带括号和地址的 x86 中的 CMP

汇编指令学习(CMP,TEST)

关于 AT&T 语法汇编中的 cmp/jg、jle 等

x86 AT&T 寻址模式中基址寄存器的省略

Android 逆向x86 汇编 ( cmp 比较指令 | test 比较指令 )

Android 逆向x86 汇编 ( cmp 比较指令 | test 比较指令 )