【发布时间】:2019-03-29 17:17:30
【问题描述】:
我有几个装配项目要实现,但我对何时在堆栈上添加空间以及应该添加多少感到困惑。
我在 unix 系统 (macos) intel x86_64 上使用 NASM 版本 2.13.03。
我一直在阅读大量文档并进行了大量研究,但没有一个以足够详细的方式解释我的问题的答案。 我理解红色区域,并且叶子函数不需要使用增加的堆栈。
我知道使用 sub rsp 增加堆栈应该在函数调用之前使用,而 add rsp 应该在函数调用之后使用。
我知道在 32 位架构上,您使用 push 和 pop 来增加堆栈,但在这个 64 位架构上,需要使用 sub rsp 和 add rsp 以及 mov 指令来添加寄存器堆栈。
如果有人对使用此架构的堆栈有任何提示或解释,并说明何时增加堆栈以及应该给出多少,非常感谢!
【问题讨论】:
-
push rbx在 x86-64 上保存/恢复 RBX 完全没问题。如果您为超过 8 个字节的本地变量保留空间,并且还没有要存储的值,那么您通常会使用sub而不是多个虚拟推送。 -
@PeterCordes 这样就更清楚了,感谢您的回复!我仍然无法准确掌握何时需要将值压入堆栈,但我会解决的,哈哈
标签: stack x86-64 nasm intel cpu-registers