【问题标题】:What does comma separated bracket mov instruction mean in disassembly反汇编中逗号分隔的括号mov指令是什么意思
【发布时间】:2026-01-16 14:55:02
【问题描述】:
   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 是什么意思?

【问题讨论】:

标签: disassembly


【解决方案1】:

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]

在 Intel 助记符中,与

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

在伪 C 语法中。

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

【讨论】:

    最近更新 更多