首页
社区
课程
招聘
[求助]书中关于函数调用的一章,系统调用和 栈平衡问题~
发表于: 2009-3-11 09:20 5064

[求助]书中关于函数调用的一章,系统调用和 栈平衡问题~

2009-3-11 09:20
5064
问题1. 系统调用时也会发生和函数调用一样的压栈操作吗??
问题2.函数调用返回地址,这个地址应该返回给EIP寄存器吗?而且值应该是调用点处call指令的下一条指令地址吗?不应该再返回到call指令处吧
问题3. 栈平衡时,说其实只压入上一栈帧的EBP,上一栈帧的ESP可以通过栈平衡计算得到,如何平衡? (是不是应该有个地方记录当前栈帧的大小的寄存器,然后拿当前的ESP减去该寄存器的值就是上一栈帧的栈顶)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
1.是的,即使函数没有参数,至少得压入返回地址
2.是的,是的,不应该
3.没看懂你的问题
2009-4-1 10:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
3.调用函数压栈时先要将参数入栈,然后是返回地址,所谓上一栈的ESP就是在参数入栈之前ESP的指向。堆栈平衡就是把ESP加上因为参数入栈而移动的字节数(栈内存由高到低生长)。具体的堆栈平衡方法由于调用约定的不同而不同,有的调用约定是在母函数处进行堆栈平衡,此时在母函数的call **指令后一般会有add esp,*,如C约定,有的调用约定是在子函数处进行堆栈平衡,一般是在返回时使用retn ?指令,其中?是一个需要移动的字节数。retn指令的作用就是弹出栈顶为下一条指令地址,并且将esp加上?个字节
2009-4-11 09:52
0
游客
登录 | 注册 方可回帖
返回
//