|
发表于 2013-2-23 23:10:29
|
显示全部楼层
本帖最后由 メ㊣逆ご帅☆ 于 2013-2-23 23:55 编辑
lukelqz 发表于 2013-2-23 22:55
啊哟,俺是在家无聊,搞搞咯,寒假一个月没上网了,都是手机签到的。你说用mov不太会呢。教教我吧 ...
一个月没上网。要是我会蛋疼死。。。
其实原本我也不知道这样传参,不过跟着小甲鱼老师调试的时候经常看见他们是这样调用的
VC6也很经常这样做
我已经发现EBP不行了。。。。。EBP会影响到@stTime.wDay之类的,我改用EDI
- ;其实这个跟PUSH一个道理,PUSH是即时开辟栈空间,即时传参,而这个是一次性开辟,一次性传参
- mov edi,esp;用EDI保存当前ESP地址(不能用ESP,会影响到@stTime.wDay之类的结构传值,它靠EBP的)
- sub esp,28;一次性开辟,算好需要开辟大小4*7=28,然后就是使劲传参了
- movzx eax,@stTime.wDay
- mov [edi-4],eax
- movzx eax,@stTime.wMonth
- mov [edi-8],eax
- movzx eax,@stTime.wYear
- mov [edi-12],eax
- movzx eax,@stTime.wMinute
- mov [edi-16],eax
- movzx eax,@stTime.wHour
- mov [edi-20],eax
- mov eax,offset szDataFormat
- mov [edi-24],eax
- lea eax,@szBuffer
- mov [edi-28],eax
- call wsprintf
- add esp,28;mov esp,edi
复制代码 测试是可以的
|
|