资源描述:
《_main函数调用子函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、main函数调用子函数---活动记录的变化//―――――――――――――――――――――――――――――//first//―――――――――――――――――――――――――――――/*voidsum(intx,inty){intresult;result=x+y;}voidmain(intargc,char*argv[]){inta=1;intb=2;sum(a,b);}*/汇编代码(一)1:#include2:3:voidsum(intx,inty)4:{00401020pu
2、shebp00401021movebp,esp00401023subesp,44h00401026pushebx00401027pushesi00401028pushedi00401029leaedi,[ebp-44h]0040102Cmovecx,11h00401031moveax,0CCCCCCCCh00401036repstosdwordptr[edi]5:intresult;6:7:result=x+y;00401038moveax,dwordptr[ebp+8]0040103Badde
3、ax,dwordptr[ebp+0Ch]0040103Emovdwordptr[ebp-4],eax8:}00401041popedi00401042popesi00401043popebx00401044movesp,ebp00401046popebp00401047ret9:10:11:voidmain(intargc,char*argv[])12:{00401060pushebp汇编代码(二)00401061movebp,esp00401063subesp,48h00401066pushe
4、bx00401067pushesi00401068pushedi00401069leaedi,[ebp-48h]0040106Cmovecx,12h00401071moveax,0CCCCCCCCh00401076repstosdwordptr[edi]13:inta=1;00401078movdwordptr[ebp-4],114:intb=2;0040107Fmovdwordptr[ebp-8],215:16:sum(a,b);00401086moveax,dwordptr[ebp-8]00
5、40108Ecall@ILT+5(sum)(0040100a)00401093addesp,817:}00401096popedi00401097popesi00401098popebx00401099addesp,48h0040109Ccmpebp,esp0040109Ecall__chkesp(004010c0)004010A3movesp,ebp004010A5popebp004010A6ret00401089pusheax0040108Amovecx,dwordptr[ebp-4]004
6、0108Dpushecx代码分析及表格(一)1.把ebp压入栈中2.把esp的值赋值给ebp3.让esp指向esp-48h的地方4.ebx,esi,edi依次进栈,3次压栈使得esp-35.取得ebp-48h的偏移地址放入edi中6.声明整型变量a并赋值1,由把1放入ebp-4的空间来实现,声明整型变量b并赋值2,由把2放入ebp-8的空间来实现7.把ebp-8地址存放的值赋值给eax,并且把eax压栈,sp减1.把ebp-4地址存放的值赋值给eax,并且把eax压栈,sp减1代码分析及表格(二
7、)8.把ebp压入栈中9.把esp的值赋值给ebp10.让esp指向esp-44h的地方11.ebx,esi,edi进栈,3次压栈使得esp-312.取得ebp-44h的偏移地址放入edi中,初始化ebp到ebp-44h的空间13.把ebp+8地址放的值放入eax中,再加上ebp+0CH地址放的值,把结果放入ebp-4中14.ediesiebx出栈15.把ebp的值赋值给esp并且ebp出栈代码分析及表格(三)16.esp指向esp+8的地方17.edi,esi,ebx出栈18.esp指向esp
8、+48h的地方19.比较ebp和esp并且检查esp20.把ebp的值赋值给esp,然后ebp出栈,程序结束//―――――――――――――――――――――――――――――//second//―――――――――――――――――――――――――――――intsum(intx,inty){intresult;result=x+y;returnresult;}voidmain(intargc,char*argv[]){inta=1;intb=2;intc;c=sum(a,b);}汇编代码(一)1:#in