Assembly 当asm中的alloc堆栈为16的倍数或16加8的倍数时,我应该为%rsp保持什么大小

Assembly 当asm中的alloc堆栈为16的倍数或16加8的倍数时,我应该为%rsp保持什么大小,assembly,x86-64,calling-convention,Assembly,X86 64,Calling Convention,在这个回答中,第一作者说,当我allock stack时,%rsp必须保持16加8的倍数,因为之后函数调用将在堆栈上推送地址,但在ABI中,它说rsp在程序条目中必须是16的倍数,当我真的尝试时,我发现保持rsp倍数为16加8会导致分段错误,即使在我打电话时也是如此printf@PLT之后,但保持16的倍数工作,那么当alloc堆栈时,我应该为rsp做什么呢 但在ABI中,它说在项目输入中rsp必须是16的倍数 \u start不是一个函数。它不是由任何东西调用的,堆栈上没有返回地址(只有arg

在这个回答中,第一作者说,当我allock stack时,%rsp必须保持16加8的倍数,因为之后函数调用将在堆栈上推送地址,但在ABI中,它说rsp在程序条目中必须是16的倍数,当我真的尝试时,我发现保持rsp倍数为16加8会导致分段错误,即使在我打电话时也是如此printf@PLT之后,但保持16的倍数工作,那么当alloc堆栈时,我应该为rsp做什么呢

但在ABI中,它说在项目输入中rsp必须是16的倍数

\u start
不是一个函数。
它不是由任何东西调用的,堆栈上没有返回地址(只有
argc
和实际的
argv[]
envp[]
数组)

是的,进程入口RSP已经16字节对齐,可以进行函数调用


我再次编辑了Jester关于您链接的问题的答案以澄清它

要求在调用
之前对齐16字节。在另一次调用(包括任何
push
es)之前,函数内部的偏移量为
16*n+8

但在ABI中,它说在项目输入中rsp必须是16的倍数

\u start
不是一个函数。
它不是由任何东西调用的,堆栈上没有返回地址(只有
argc
和实际的
argv[]
envp[]
数组)

是的,进程入口RSP已经16字节对齐,可以进行函数调用


我再次编辑了Jester关于您链接的问题的答案以澄清它

要求在调用
之前对齐16字节。在另一次调用(包括任何
push
es)之前,函数内部的偏移量为
16*n+8