进入_start后rsp是对齐的

时间:2016-08-30 18:43:57

标签: assembly x86-64

当程序在程序启动时进入_start例程时,堆栈指针是否以16字节边界对齐,还是应该手动对齐到该边界?我的意思是它在_start中的序言(push rbp; mov rbp, rsp)之前对齐了吗? 我知道在程序开始的x64上,RSP与8个字节对齐, 但现在知道它是否在16字节边界上对齐。对于某些任务,我可能需要对齐以正确执行需要在16字节边界上对齐的SSE指令。

1 个答案:

答案 0 :(得分:2)

x86-64 ABI明确说明(3.4.1初始堆栈和寄存器状态):

  

%rsp堆栈指针保存最低字节的地址   地址是堆栈的一部分。它保证是16字节   在流程入口处对齐。

由于_start是进入进程时调用的第一个符号,因此当操作系统调用可执行文件中的_start时,您可以完全确定它是16字节对齐的。