首页 > 解决方案 > x86-64 gcc 没有为局部变量分配堆栈帧

问题描述

我在学习汇编代码时遇到了一些问题。

我使用“编译器资源管理器”,这是一个支持大量编译器的网站。

我做了一个简单的代码并将其编译为 x86-64 gcc。

<C++ 代码>:

int sum(int a, int b)
{
    return a + b;
}

int main(void)
{
    return sum(3, 4);
}

总和(整数,整数):

    push    rbp
    mov     rbp, rsp
    mov     DWORD PTR [rbp-4], edi
    mov     DWORD PTR [rbp-8], esi
    mov     edx, DWORD PTR [rbp-4]
    mov     eax, DWORD PTR [rbp-8]
    add     eax, edx
    pop     rbp
    ret

主要的:

    push    rbp
    mov     rbp, rsp
    mov     esi, 4
    mov     edi, 3
    call    sum(int, int)
    nop
    pop     rbp
    ret

据我所知,堆栈在 x86 中呈现局部变量和保存返回地址等。

我看不到任何关于“sub rsp,??”的内容 在功能序言中。而且我看不到“添加rsp,??” 在功能结语中也是如此。

标签: assemblygccx86-64stack-framered-zone

解决方案


推荐阅读