我有以下功能:
void myFunc()
{
int a, b, c;
a = 1;
b = 2;
c = 3;
}
gcc -S file.c 给出了这样的汇编代码:
myFunc:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $1, -12(%rbp)
movl $2, -8(%rbp)
movl $3, -4(%rbp)
nop
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
正如我们所见,变量a、b和c存储在 RSP 寄存器指向的位置下方的内存中。
它是如何工作的?为什么 gcc 不从 esp 中减去所需的内存空间?如果我想使用内联汇编代码并在那里使用指令“push”怎么办?它会覆盖局部变量吗?