首页
论坛
课程
招聘
[求助]《加密与解密(第4版)》110页 表4.3 疑问,恳请前辈们指点下迷津
2019-10-6 14:35 1220

[求助]《加密与解密(第4版)》110页 表4.3 疑问,恳请前辈们指点下迷津

2019-10-6 14:35
1220
有几点疑问,恳请前辈们指点下迷津!
1.C程序默认函数调用约定为C规范,即参数传递顺序从右到左依次入栈,清参操作由调用者执行,没错吧!~
2. 上表4.3是一段C程序的汇编实现,主程序参数入栈不应该是push y push x之前吗 ?
3. 右边MyAdd函数部分,sub esp, 4 为局部变量分配空间没问题,倒数第二条指令 add esp, 4 是在清理局部变量吗?可是倒数第三条mov esp, ebp已经把栈顶指针还原到分配局部变量之前的状态了,即便是想执行本该由主程序完成的清参操作,那也应该是add esp, 8 
搞不懂add esp, 4这条指令想干嘛?似乎 ret 前还少了条 pop ebp 


[公告]春风十里不如你,看雪团队诚邀你的加入!

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 16719
活跃值: 活跃值 (2413)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
jishuzhain 活跃值 7 2019-10-6 14:41
2
1
add esp, 4这条指令是为了平衡站(函数自己清理),因为前面是sub esp, 4 。
雪    币: 16719
活跃值: 活跃值 (2413)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
jishuzhain 活跃值 7 2019-10-6 14:47
3
0
请仔细阅读下调用约定就知道原因了,基础还是很重要的。
雪    币: 164
活跃值: 活跃值 (65)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_P&L 活跃值 2019-10-6 15:05
4
0
jishuzhain add esp, 4这条指令是为了平衡站(函数自己清理),因为前面是sub esp, 4 。
可是add esp,4 的上一条指令mov esp,ebp已将栈恢复到了分配局部变量之前的状态了
雪    币: 4188
活跃值: 活跃值 (620)
能力值: ( LV11,RANK:194 )
在线值:
发帖
回帖
粉丝
堂前燕 活跃值 1 2019-10-6 16:59
5
1
add esp, 4 和pop ebp 都会使esp+4 从而清除开辟的局部变量(然后esp指向call保留的返回地址),后者捎带还原了ebp。
mov esp,ebp是将栈恢复到了push ebp后的状态,此时esp指向的是保存的ebp。画个图就很清楚了。cdecl不清理参数
雪    币: 164
活跃值: 活跃值 (65)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_P&L 活跃值 2019-10-6 18:04
6
0
堂前燕 add esp, 4 和pop ebp 都会使esp+4 从而清除开辟的局部变量(然后esp指向call保留的返回地址),后者捎带还原了ebp。 mov esp,ebp是将栈恢复到了push ebp ...
谢谢,请楚了!
还有个问题,C规范下函数参数的传递按照从右到左顺序入栈,那这里主程序不该先push y吗 ?
最后于 2019-10-6 18:08 被wx_P&L编辑 ,原因:
雪    币: 15
活跃值: 活跃值 (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_milmminf 活跃值 2020-11-19 16:44
7
0
我没搞懂最后的堆栈ebp地址要比esp低啊
雪    币: 1129
活跃值: 活跃值 (719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haogl 活跃值 2020-11-19 17:00
8
0

传一张我之前的学习笔记图片,应该能很清楚的表达这个问题!

最后于 2020-11-19 17:15 被haogl编辑 ,原因:
雪    币: 5245
活跃值: 活跃值 (5271)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
SSH山水画 活跃值 1 2020-11-19 17:04
9
0
haogl 传一张我以前的学习笔记图片,应该能很清楚的表达这个问题!
一看就是师从海哥
雪    币: 1129
活跃值: 活跃值 (719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haogl 活跃值 2020-11-19 17:16
10
0
是滴是滴,以前学的那些教程坑了我,完全不懂原理,学了海哥的教程,终于能看懂原理了。
雪    币: 1129
活跃值: 活跃值 (719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haogl 活跃值 2020-11-19 17:21
11
0

再分享两张,好教程让我很想往下学,所以做了详细的笔记,为了能随时温故知识!

最后于 2020-11-19 17:21 被haogl编辑 ,原因:
游客
登录 | 注册 方可回帖
返回