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