逗号分隔的括号mov指令在反汇编中是什么意思

What does comma separated bracket mov instruction mean in 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是什么意思?

AT&T x86/x64 助记符中内存操作数(解引用)的一般语法是 offset(base, index, scale),与 Intel 语法中的 [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 的值。