【发布时间】:2015-03-29 20:55:54
【问题描述】:
我目前正在使用 nasm 在 Mac OSX 上学习 x64 asm。
我遇到了对齐堆栈的问题,这是一些系统调用(例如 malloc)的必要步骤,这是通过以下说明完成的:
push rbp
mov rbp, rsp
sub rsp, 16
谁能解释一下函数 prolog 是如何对齐堆栈的?我的意思是,如果它还不是 16 的倍数,为什么 sub rsp, 16 会更正它?
假设esp = 0x35,在sub rsp, 16,esp = 0x25之后,对吗?所以 esp 在 sub 之前没有对齐 16 的倍数,sub 也没有对齐它,所以我想我还不太明白“对齐堆栈”是什么意思。
当我读到“堆栈需要在 16 字节边界上对齐”时,有人能告诉我应该理解什么吗?
【问题讨论】:
标签: macos assembly stack x86-64 memory-alignment