带参数的函数.doc

带参数的函数.doc

ID:52705104

大小:63.00 KB

页数:4页

时间:2020-03-29

带参数的函数.doc_第1页
带参数的函数.doc_第2页
带参数的函数.doc_第3页
带参数的函数.doc_第4页
资源描述:

《带参数的函数.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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。