首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
社区
付费问答
发新帖
0
0
[旧帖]
[求助]菜鸟求助,为什么call之后,一般会执行add esp,4
0.00雪花
发表于: 2012-12-3 00:09
4950
[旧帖]
[求助]菜鸟求助,为什么call之后,一般会执行add esp,4
0.00雪花
秦超
2012-12-3 00:09
4950
例如:
call @ILT+30(Accumulation)(00401032)
add esp,4
请问上面的add esp,4是什么意思,恢复现场的意思吗,
那为什么是+4,不是+8呢
[课程]Android-CTF解题方法汇总!
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
4
)
zkek
雪 币:
10
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
9
回帖
109
粉丝
0
关注
私信
zkek
2
楼
esp是指针寄存器,用于栈。
call操作就是调用一个函数,函数一般是有参数的,一般参数都是4字节,放在栈上的,add esp,4(或者8或者12等)之前应该还有push操作的,add esp的操作就是要让esp指到正确的参数上(想象一下栈内参数错位会是什么后果吧)。
+4就是一个参数,+8就是2个参数(前面多半要push两次)。当然还有调用约定的区别
我理解是这样的,不知道对不对,若是误人子弟了就算你倒霉了吧.呵呵。
2012-12-3 11:40
0
sanerersan
雪 币:
2
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
7
回帖
10
粉丝
0
关注
私信
sanerersan
3
楼
堆栈平衡
在 __cdecl调用方式需要调用者自动平衡堆栈,也就是你问题中的这种
在__stdcall中被调者自己平衡堆栈,如下:
...
push ebp
mov ebp,ebp
...
//执行完毕
ret 4(假设只推入了一个参数)
所以你这里的 add esp,4 是用来平衡堆栈的,之所以是4 是因为只推入了一个参数
2012-12-3 20:25
0
秦超
雪 币:
1
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
4
粉丝
0
关注
私信
秦超
4
楼
上面的那个ret 4,是被调用的函数执行的吧,这个时候就不需要add esp,4;这样理解对吗
2012-12-4 11:06
0
zldww
雪 币:
3
活跃值:
(132)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
41
粉丝
0
关注
私信
zldww
5
楼
我感觉应该是为了堆栈平衡吧,push压栈一次esp会减4,为了平衡就会出现add esp,4 来实现栈平衡,如果压两次栈最后就将esp加8,纯属个人理解
2012-12-5 01:04
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
秦超
2
发帖
4
回帖
10
RANK
关注
私信
他的文章
[求助]菜鸟求助,为什么call之后,一般会执行add esp,4
4951
[求助]改字体,下面编码怎么得到
1209
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
返回
顶部