我对如何为我的汇编代码绘制堆栈帧感到困惑。
这是我目前的进展情况,但是你可以看到我在第5步时很困惑,因为我认为我的初始布局是错误的。
请问您能告诉我哪里错了吗?
我认为最好从一个图表开始,它显示了堆栈“顶部”处的某些(半)任意空间,并且可能在左侧显示 EBP 和 ESP,用箭头指示它们所指向的位置。我使用实箭头表示“指向”,虚线箭头表示数据移动(回想起来,最好将其反转)。
在这种情况下,当前ebp(一旦从esp中捕获)与y之间的距离确实为8个字节,因为堆栈上有返回eip和先前ebp的值。就我所知,您的图表是正确的,尽管左侧地址更加混乱 :)
该图显示了返回地址下方的参数,实际上是错误的。
假设堆栈向较低地址增长,如果需要将参数放在堆栈上,则它们位于比返回地址更高的地址处。
mov %esp, %ebp
。当你将 ESP 中的值移动到 EBP 中时,它们最终指向同一个位置... - Jerry Coffin