欢迎来到天天文库
浏览记录
ID:52705104
大小:63.00 KB
页数:4页
时间:2020-03-29
《带参数的函数.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、零起点跟我学逆向C++啊冲QQ群1096887594.2带参数的函数源代码#includeintadd(intx,inty>{returnx+y。}intmain(>{inta。a=add(1,2>。printf("%d",a>。return0。}反汇编头部略。。。10:inta。11:a=add(1,2>。0040D748push20040D74Apush10040D74Ccall@ILT+10(show>(0040100f>0040D751addesp,80040D754movd
2、wordptr[ebp-4],eax12:printf("%d",a>。0040D757moveax,dwordptr[ebp-4]0040D75Apusheax0040D75Bpushoffsetstring"%d"(00422fb0>b5E2RGbCAP0040D760callprintf(00401060>0040D765addesp,813:return0。0040D768xoreax,eax尾部略。。。自定义函数1:#include2:3:intadd(intx,int
3、y>4:{0040D6F0pushebp0040D6F1movebp,esp0040D6F3subesp,40h4/40040D6F6pushebx0040D6F7pushesi0040D6F8pushedi0040D6F9leaedi,[ebp-40h]0040D6FCmovecx,10h0040D701moveax,0CCCCCCCCh0040D706repstosdwordptr[edi]5:returnx+y。0040D708moveax,dwordptr[ebp+8]0040D70Baddeax
4、,dwordptr[ebp+0Ch]6:}0040D70Epopedi0040D70Fpopesi0040D710popebx0040D711movesp,ebp0040D713popebp0040D714ret我们看到EBP+8是X,EBP+C是Y,将数值相加后放入EAX里返回。然后主函数调用0040D754movdwordptr[ebp-4],eax将返回值存放到主函数的变量里,这就是带参数的函数执行流程。4/4再用IDA看下RELEASE版看下00401000处我们看到在主函数传递参数的时候是先右侧
5、参数2,再传参数1,而在IDA下显示的arg_4则是先被PUSH进来的参数2,arg_0则是后被PUSH进来的参数1。p1EanqFDPw4/4为了更加明确的显示,我们再调用OD看下子函数的代码。当执行到00401000时看ESP堆栈分析:当前ESP地址就是返回上级函数地址,ESP+4是第1个参数,ESP+8是第2个参数,再下面ESP+C是上级函数的向上返回地址,也就是上级函数的上级函数地址了喽。DXDiTa9E3d再次总结:我们的这个程序,在RELEASE版里当前ESP是返回地址,ESP+4是第1个参数
6、,ESP+8是第2个参数,以此类推,参数的下面地址中还有更多的上级函数返回地址。而在DEBUG版里是用EBP来记录函数返回地址、上级传参以及局部变量的。RTCrpUDGiT申明:所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。4/4
此文档下载收益归作者所有