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 是什么意思?
答案 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。