栈帧

具体文档:x86 Disassembly/Functions and Stack Frames - Wikibooks, open books for an open world

栈帧是内存栈中的一块区域,用来保存函数的所有状态参数。通常,我们通过 ESP 来指示栈帧的顶部,用 EBP 来指示栈帧的底部。示意图如下所示:
image.png|600

为了避免内存冲突,栈帧的大部分内容是不能被其他函数访问的,只有顶部的一些字可以被访问,这些字节主要用于函数参数、返回值的传递

调用参数一般是从高到低对应的参数从左到右。例如,对于该函数:

int add(int x, int y);

我们可以通过 [ebp+12] 访问 y,通过 [ebp+8] 访问 x