|
|

楼主 |
发表于 2005-9-13 21:55:58
|
显示全部楼层
Post by chairman
__asm__("pushl $n;");
是把n那个地方的地址压栈.在g()返回的时候可以弹出.那么g()返回的时候是弹出栈顶的
数据,还是会弹出一个固定的地址.
我把main里的f();屏蔽后,为什么在main结束的时候不能弹出n的地址呢?
因为main函数最后的汇编是这样的:
而leave=
那我们发现,最后的esp是由当前的ebp决定的,而ebp在一个函数内部可以认为是不变的,不会因为压入了一些数据而改变.所以,在ret之前,esp已经指向main函数应该返回的地方. |
|