用堆栈传递子程序的参数时,栈顶的数据是主函数地址,所以要保留,是不是啊
------解决方案--------------------------------------------------------
不能说是主函数的地址吧, 是返回到主函数去的那个地址. 所说的保留是子函数开始时的 mov (e)bp, (e)sp 这样的指令? 这个指令有两个作用, 一个是此后可以通过 (e)bp±?? 来对参数和子函数局部变量进行访问; 另外一个, 子函数最后的 mov (e)sp, (e)bp 或 leave 指令来消除子函数中堆栈可能的不平衡操作对返回地址获得的不利影响, 因为这样的话, 无论此前堆栈不平衡成什么样, 籍此指令也能恢复到平衡状态, 子函数可以顺利地返回.
------解决方案--------------------------------------------------------
LZ是说
push xxx
push xxx
.
.
.
call xxxx
这种形式吗?
进入子程序时,栈顶应该是(e)bp,下面紧跟的才是被调用子程序返回到调用程序的偏移地址。
------解决方案--------------------------------------------------------
如果没有定义局部变量的话,子过程是以
push ebp
mov ebp,esp
开始的,此时esp,ebp均指向栈顶