首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
编程技术
发新帖
0
0
cdtDraw 返回值在eax中还是在ecx中
发表于: 2006-4-2 18:11
5571
cdtDraw 返回值在eax中还是在ecx中
ilovemasm
2006-4-2 18:11
5571
今天看这样一段代码,是关于用cards.dll写扑克游戏的.有如下的一行 invoke 调用,在调用前将ecx入栈,稍后出栈,但一般的函数返回值都应在 eax 中啊,如果去掉 push ecx 和 pop ecx 这两行语句,程序会出错,这到底是怎么回事?
......
push ecx
invoke cdtDraw, hDC, esi, edi, ebx, mdFace, rgbBground
pop ecx
......
[注意]APP应用上架合规检测服务,协助应用顺利上架!
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
6
)
小虾
雪 币:
2384
活跃值:
(766)
能力值:
(RANK:410 )
在线值:
发帖
36
回帖
2248
粉丝
7
关注
私信
小虾
10
2
楼
这是因为ecx中保存着有其它地方要用的数据,而cdtDraw会改变ecx的值,所以在调用cdtDraw函数的时候要先保存一下ecx的值,函数返回后再恢复ecx的值。
2006-4-2 18:17
0
ilovemasm
雪 币:
207
活跃值:
(40)
能力值:
( LV2,RANK:10 )
在线值:
发帖
8
回帖
22
粉丝
0
关注
私信
ilovemasm
3
楼
感谢小虾的帮助, ECX 中确有要保护的数据, 但并没有 cdtDraw 函数破坏 ECX 寄存器的证据.照理说,函数要破坏某些寄存器前,应先将其保护起来,在返回前
再恢复它们,难道 cdtDraw 函数不知道这样做吗?
2006-4-2 18:32
0
小虾
雪 币:
2384
活跃值:
(766)
能力值:
(RANK:410 )
在线值:
发帖
36
回帖
2248
粉丝
7
关注
私信
小虾
10
4
楼
API函数一般只会保存edi、esi和ebx、ebp、esp这几个寄存器,EAX/ECX/EDX这三个寄存器可不能保证了。
2006-4-2 18:40
0
ilovemasm
雪 币:
207
活跃值:
(40)
能力值:
( LV2,RANK:10 )
在线值:
发帖
8
回帖
22
粉丝
0
关注
私信
ilovemasm
5
楼
还请小虾不厌其烦,API函数返回值在EAX中自不必说,那么在实际应用中,像edi、esi和ebx、ebp、esp这几个寄存器是不是可以不用去管它,而EAX/ECX/EDX中如果有需要保护的数据,必须先PUSH起来,对吗?还有其它寄存器需要PUSH吗?
2006-4-2 18:54
0
小虾
雪 币:
2384
活跃值:
(766)
能力值:
(RANK:410 )
在线值:
发帖
36
回帖
2248
粉丝
7
关注
私信
小虾
10
6
楼
eax/ecx/edx如果有需要保护的数据,必须先push起来,其它基本上不用了。
2006-4-2 19:07
0
ilovemasm
雪 币:
207
活跃值:
(40)
能力值:
( LV2,RANK:10 )
在线值:
发帖
8
回帖
22
粉丝
0
关注
私信
ilovemasm
7
楼
thank you very much
2006-4-2 19:08
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
ilovemasm
8
发帖
22
回帖
10
RANK
关注
私信
他的文章
这是一个什么样的字符串?
5601
[注意]书的质量差
7780
[求助]请问"透明的"是什么意思?
7304
资源编辑问题
4316
cdtDraw 返回值在eax中还是在ecx中
5572
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部