首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x86-64调用约定,推送基础ptr应为8 byes

x86-64调用约定,推送基础ptr应为8 byes
EN

Stack Overflow用户
提问于 2011-11-02 02:24:15
回答 1查看 823关注 0票数 1

在x86-64汇编中,我看到我的main函数如下所示...

代码语言:javascript
复制
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)之前开始。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-02 02:42:02

旧的基指针位于0(%rbp)。它占用从0(%rbp)7(%rbp)的字节。-4(%rbp)处的字节不与旧的基指针重叠。(其他字节-3(%rbp)-2(%rbp)-1(%rbp)也不需要。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7971019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档