1

我有以下功能:

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

正如我们所见,变量abc存储在 RSP 寄存器指向的位置下方的内存中。

它是如何工作的?为什么 gcc 不从 esp 中减去所需的内存空间?如果我想使用内联汇编代码并在那里使用指令“push”怎么办?它会覆盖局部变量吗?

4

0 回答 0