结构¶
你可以把调用栈看作汇编代码可以直接访问和操纵的 DWORD 值 FILO(先进后出)列表。之所以叫「栈」,是因为它的结构像一叠纸:对象从顶部添加和移除。数据通过 PUSH 操作数命令添加到栈,通过 POP 寄存器命令移除(并放入寄存器)。图 4-6 展示了这个过程可能的样子。
在 Windows 中,栈从较高的内存地址向较低的地址增长。它占用有限的内存块,从地址 n(绝对底部)向上堆积到地址 0x00000000(绝对顶部)。这意味着 ESP(指向栈顶的指针)在添加项目时减小,移除项目时增大。