当前位置: 首页 > news >正文

营销网站 深圳什么网站可以接设计方案

营销网站 深圳,什么网站可以接设计方案,为什么做网站必须用服务器,wordpress登录 不了目录 1.寄存器EBP和ESP 2.函数栈帧的创建 3.函数的调用 4. 函数栈帧的销毁 函数栈帧#xff08;function stack frame#xff09;是在函数调用期间在栈上分配的内存区域#xff0c;用于存储函数的局部变量、参数、以及用于函数调用和返回的相关信息。每当函数被调用时function stack frame是在函数调用期间在栈上分配的内存区域用于存储函数的局部变量、参数、以及用于函数调用和返回的相关信息。每当函数被调用时都会创建一个新的栈帧函数执行结束后该栈帧会被销毁。 1.寄存器EBP和ESP 寄存器是位于CPU内部的一组用于存储和处理数据的小型临时存储器。它们被设计用于执行指令、进行算术和逻辑运算、控制程序流程等任务。寄存器通常比内存访问速度更快因为它们直接集成在CPU内部而不需要通过外部总线进行访问。 EBP和ESP是 x86 架构下的寄存器用于在函数调用过程中维护被调用的函数的栈帧。 EBP是扩展基址寄存器栈底指针通常用来指向当前函数的栈帧的基址高地址处。ESP是栈指针寄存器栈顶指针指向当前栈顶的位置低地址处。 每当函数调用时时都要在栈区上创建一个空间并且将栈区的地址分别交由寄存器EBP和ESP来来维护。正在调用的是哪个函数这两个寄存器就维护哪个函数的栈帧。 2.函数栈帧的创建 接下来通过一个简单求和函数来了解函数栈帧的创建过程 #includestdio.hint Add(int x, int y) {int z 0;z x y;return z; }int main() {int a 2;int b 1;int c Add(a, b);return 0; } 再来看这段反汇编代码 可以看到在进入main函数的时候有一系列的反汇编指令它们是什么意思干了什么事情 下面是一个内存演示图 在进入main函数之前ebp和esp分别指向调用main函数的函数的栈底和栈顶。 push ebp压栈执行这一条语句后将ebp的值放在esp的位置esp维护栈顶位置所以esp向高地址走一步值减小 mov ebp,esp将esp的值给ebp  sub esp,0E4hesp向上低地址处移动现在ebp与esp之间的空间就是为main函数开辟的栈帧空间 push  ebx , push esi, push sdi:把ebx,esi,edi分别压入栈 lea  edi,[ebp-24h]ebp的值减去24十六进制的偏移量然后将结果储存在edi中。这样做是为了将edi指向要填充的内存区域的起始地址。 mov ecx,9存储到ecx中。这个值表示要填充的内存区域的大小单位为dwordDouble Word 即4字节. mov eax,0cccccccch将0xcccccccc 存储到eax中. rep stos dword ptr es:[edi]  :一个重复rep操作它会将eax中的值0xcccccccc存储到edi所指向的内存地址处存储的长度为ecx中的值9 dword 3.函数的调用 到这里为止调用main函数的准备工作才算结束接下来才刚开始执行我们写的代码 mov  eax,dword ptr [a]写入数据到a的位置。这里的b其实就是ebp - 8 的位置 后面的mov都是写入数据只是写入的位置逐渐向低地址处移动。 终于来到调用函数Add的部分首先我们进行函数的参数传递 mov eax,dword ptr [b]将ptr[b]放到eax里去 push eaxeax入栈 mov eax,dword ptr [b]将ptr[a]放到eax里去 push eaxeax入栈 注意由上面的四条指令可以看出虽然形参的顺序是先a后b但是实际压入栈的顺序是先b后a call  _Add (03410B9h) 调用函数Add,其中03410B9h是函数的地址。并且把call指令的下一条指令压入栈使Add函数执行完后知道下一条该执行的指令。 现在来到Add函数里面 可以发现前面部分跟在调用main函数的时候是相似的即为Add函数创建栈并初始化。 要注意的时现在的ebp,esp已经由维护main函数的栈帧变为维护Add函数因为此时我们已经开始创建Add的栈帧了。 mov eax,dword ptr[x]这里其实就是找到刚刚压入Add函数的值即ptr[x]位置的eax,值为1 add eax,dword ptr[y]将ptr[x]位置的eax值为2和prt[x]相加得到3 mov dword ptr[z],eax把3放入eax,即得到z3 从这里可以看出当我们真正进入函数调用两个数相加时形参根本不是在Add中创建的而是在Add中找到刚刚调用函数时压入的空间所存放的数据即图中所示的空间 所以这样就能很明确的知道形参是实参的一份临时拷贝  mov  eax,dword ptr [z]将z的值放入eax中因为z会随着函数的结束而被销毁要想返回一个值需要用eax这样一个寄存器来保留因为寄存器是不会随着函数的结束而被销毁的。 4. 函数栈帧的销毁 pop edi、pop esi、pop ebx弹出edi,esi,ebx同时每次弹出时esp也向高地址处移动 mov esp,ebp将esp指向ebp的位置 pop ebp弹出ebp此时ebp回到main函数中ebp原本的位置esp由于这一次pop也向高地址处移动1偏移量指向刚刚保存call的下一条指令的位置准备执行下一条指令。1 add esp,8将esp向高地址处移动两个偏移量此时用于保存之前压入Add函数的两个形参的eax就被释放了 mov dword ptr [c],eax把刚刚保留c的那个eax复制给c 到这里整个过程就介绍的差不多了从中我们可以的出许多结论比如 1.释放栈帧所占用的内存空间是通过移动栈帧指针从而允许后续操作直接覆盖数据来实现的 2.函数调用后还能找到下一条执行的语句是因为在调用函数之前当前函数的上下文需要被保存到栈中以便在函数执行完毕后能够正确返回到调用函数。 3.函数传参时是将函数调用时传递的参数复制到栈帧中的相应位置以便函数内部能够访问这些参数。
http://www.zqtcl.cn/news/709152/

相关文章:

  • 可信赖的赣州网站建设做羽毛球网站
  • 如何找网站做推广wordpress登录及注册
  • 韩国美容网站 模板wordpress中英文
  • 为什么邮箱突然进不去了总提示正在进入不安全网站wordpress需注册访问
  • 建网站哪家最好山东泰安房价
  • wordpress4.9+多站点网络推广公司联系昔年下拉
  • 西安seo网站关键词优化罗田县建设局网站
  • 北京网站建设 shwllnmp新手 wordpress
  • 优化网站结构一般包括如何进行网络营销风险控制
  • 怎样查看网站是用什么做的郫都区规划建设局网站
  • 新乡营销型网站建设制作网站设计的总结
  • 做网站的免费空间微信crm管理系统
  • 网站开发方向 英语翻译护肤品网页设计图片
  • 南昌做兼职的网站佛山网站建设公司排名
  • 购物网站建设推进表国外设计素材网站
  • 广州网站建设推广公司有哪些有一个网站专门做民宿
  • 安徽省建设干部网站淘客网站超级搜怎么做
  • 网站地图提交地址网站地图可以自己做么
  • 电子商务网站建设与推广wordpress手机大标题
  • 网站页面上的下载功能怎么做ps扩展插件网站
  • 打开网站出现directory今天时政新闻热点是什么
  • 高校校园网站建设与运行网站规划教学设计
  • 包头手机网站制作seo推广手段
  • 汕头网站推广seo品牌网站建设 app建设
  • 网站后台word编辑器如何申请一个网站 做视频
  • 源代码做网站网站编辑可以做运营吗
  • 小游戏网站模板无锡网站建设818gx
  • 娄底做网站陕西网站维护
  • 电子商务网站建设首要问题是佛山网站设计步骤
  • iphone网站哈尔滨做平台网站平台公司吗