当程序在程序启动时进入_start
例程时,堆栈指针是否以16字节边界对齐,还是应该手动对齐到该边界?我的意思是它在_start中的序言(push rbp; mov rbp, rsp
)之前对齐了吗?
我知道在程序开始的x64上,RSP
与8个字节对齐,
但现在知道它是否在16字节边界上对齐。对于某些任务,我可能需要对齐以正确执行需要在16字节边界上对齐的SSE
指令。
答案 0 :(得分:2)
x86-64 ABI明确说明(3.4.1初始堆栈和寄存器状态):
%rsp
堆栈指针保存最低字节的地址 地址是堆栈的一部分。它保证是16字节 在流程入口处对齐。
由于_start
是进入进程时调用的第一个符号,因此当操作系统调用可执行文件中的_start
时,您可以完全确定它是16字节对齐的。