ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

堆栈图

2020-01-15 23:57:38  阅读:265  来源: 互联网

标签:eax edi mov push ebp 堆栈 dword


CALL和JMP的区别

CALL会把调用处的下一个指令的地址压栈,而JMP不会

 

函数的调用过程

//funciton add(a,b){return a+b}

push第一个参数入栈
push第二个参数入栈

call调用的返回地址压栈

跳转准备

push ebp //保存当前栈底

mov ebp,esp //提升栈底,此时ebp所在的内存单元保存了原来的栈底地址

sub esp,40h //建立缓冲区

push ebx //保存当前执行环境

push esi //保存当前执行环境

push edi //保存当前执行环境



//填充缓冲区,cc 表示int3中断,当程序访问缓冲区的时候就会停下

lea edi,dword ptr ss:[ebp-40h] //区ebp-40的地址保存到edi

mov ecx,10h

mov eax,cccccccch

rep stos dword ptr es:[edi] //把eax的值循环复制到edi指向的内存地址,执行10h次,每次执行后根据flag寄存器的D位来进行+4/-4



//程序功能
mov eax,dword ptr ss:[ebp+8] //把函数调用的最后一个参数保存到eax
add eax,dword ptr ss:[ebp+c] //把第一个参数累加到eax


//恢复现场
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp

retn //相当于pop eip

//此时栈里还有 第一个参数和第二个参数在栈顶,需要把它们干掉,以保证调用前和调用后的栈顶指针一致。
add esp,8 //外平栈






 

 

 

 

标签:eax,edi,mov,push,ebp,堆栈,dword
来源: https://www.cnblogs.com/toolmanc/p/12199289.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有