将局部变量地址c ++堆栈到程序集

时间:2019-05-08 13:05:20

标签: assembly x86 disassembly

   int square(int num) {
    return num;
}

给予

    push    rbp
    mov     rbp, rsp
    mov     DWORD PTR [rbp-4], edi
    mov     eax, DWORD PTR [rbp-4]
    pop     rbp
    ret

然后我刚刚在函数内添加了局部变量

int square(int num) {
    int l = 1;
    return num;
}

我得到这个输出

    push    rbp
    mov     rbp, rsp
    mov     DWORD PTR [rbp-20], edi
    mov     DWORD PTR [rbp-4], 1
    mov     eax, DWORD PTR [rbp-20]
    pop     rbp
    ret

为什么没有本地变量

mov     DWORD PTR [rbp-4], edi

据我了解,我们为带有参数num的值的局部变量保留了4个字节。

但是当我在函数中也添加了4个字节的地方添加局部变量int l = 1时

mov     DWORD PTR [rbp-20], edi

为什么-20?

我原本希望减去4个字节,所以像DWORD PTR [rbp-8],edi

我应该如何理解?

0 个答案:

没有答案