逗号分隔括号mov指令在反汇编中意味着什么

时间:2016-10-18 23:33:17

标签: disassembly

   0x7f52379dc42c:  mov    0xc(%r12,%r11,8),%r11d
   0x7f52379dc431:  mov    %r11d,0xc(%rsp)
   0x7f52379dc436:  mov    0xc(%r12,%r10,8),%r14d
   0x7f52379dc43b:  cmp    %r11d,%r14d

我理解 mov%r11d,0xc(%rsp) 表示*(rsp + 0xc)= 0xc

mov 0xc(%r12,%r11,8),%r11d 是什么意思?

1 个答案:

答案 0 :(得分:1)

AT& T x86 / x64助记符中的内存操作数(取消引用)的一般语法是offset(base, index, scale),与英特尔语法中的[base + index * scale + offset]相同(与伪几乎相同) -C使用的语法。

具体来说,是你的第一条指令

mov 0xc(%r12,%r11,8), %r11d

相同
mov r11d, DWORD PTR [r12+r11*8+0xc]

在英特尔助记符中,与

大致相同
r11d = *(r12 + r11 * 8 + 0xc)

在伪C语法中。

请注意,在指令中仅使用2位对比例进行编码,并且始终为2的幂,因此仅允许值为1,2,4和8。