在x86-64汇编中,我看到我的main函数如下所示...
push %rbp
mov %rsp, %rbp
mov %edi,-0x14(%rbp)
mov %rsi,-0x20(%rbp)
movl $0x0,-0x4(%rbp)
movl $0x0,-0x8(%rbp)注意,它做的第一件事就是在堆栈上抛出基指针。然后,它将旧的堆栈顶部(rsp)移入基址ptr寄存器。
这是我的问题,最后两行是将局部变量初始化为0。它们位于距基本ptr的-4和-8偏移量。BUT...if旧的基指针与新的基指针的偏移量是0,怎么会这样呢?由于这是一个64位机器,所以旧的基指针应该是8字节长。因此,局部变量不应该在-0x8(rbp)之前开始。
发布于 2011-11-02 02:42:02
旧的基指针位于0(%rbp)。它占用从0(%rbp)到7(%rbp)的字节。-4(%rbp)处的字节不与旧的基指针重叠。(其他字节-3(%rbp)、-2(%rbp)和-1(%rbp)也不需要。)
https://stackoverflow.com/questions/7971019
复制相似问题