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

网站建设学什么的腾讯推广平台

网站建设学什么的,腾讯推广平台,帝国cms做微网站,方舟网站建设Yan-英杰的主页 悟已往之不谏 知来者之可追 目录 ​0.ebp和esp是如何来维护栈帧的呢? 1.为什么局部变量的值不初始化是随机的? ​2.局部变量是怎么创建的? ​3 .函数是如何传参的?传参的顺序是怎样的 4.函数是如何调用的 ​…

 

Yan-英杰的主页

悟已往之不谏 知来者之可追


目录

​0.ebp和esp是如何来维护栈帧的呢?

1.为什么局部变量的值不初始化是随机的?

​2.局部变量是怎么创建的?

​3 .函数是如何传参的?传参的顺序是怎样的

4.函数是如何调用的

​5.形参和实参的关系

​6.函数调用结束后如何返回?


 

         在学习函数栈帧的创建与销毁前,我们应该理解寄存器的概念作为铺垫:esp ebp  eax ebx ecx(本质是一个计数器) edx等寄存器,其中esp ebp尤为重要,这是因为这两个寄存器中存放的是地址,而这两个地址是用来维护栈帧的   

0.ebp和esp是如何来维护栈帧的呢?

        当我们调用Main函数时

        当我们调用Add函数时

        注:通常我们成ebp为栈底指针,esp为栈顶指针,此外在32位环境下是ebp和esp而到了64位环境下栈底指针和栈顶指针变为rbp和rsp

        当我们弄懂了寄存器的概念,此时我们就正式开始学习函数的栈帧和创建,在学习前,带着疑问,进入学习:

1.为什么局部变量的值不初始化是随机的?

2.局部变量是怎么创建的?

3.函数是如何传参的?传参的顺序是怎样的?

4..函数是如何调用的?

5.形参和实参的关系?

6.函数调用结束后如何返回?

1.为什么局部变量的值不初始化是随机的?

 

        其他编辑器调用过程过于繁琐,不利于我们观察堆栈的调用过程,为了方便观察和学习,我们以VS2013为例,查看函数在堆栈中的调用情况

         通过该调用过程,我们不难看出,在调用main函数之前,我们首先调用了mainCRTStartup函数,通过mainCRTStartup函数调用了__tmainCRTStartup函数调用了main函数

        我们使用ebp(rbp)和esp(rsp)来维护main函数的栈帧空间,首先进行压栈,此时esp栈顶指针的位置上移,而后将esp的地址赋给ebp,使得ebp指向了esp

         而后我们开辟出了一块大为0E4h大小的栈帧空间,该空间即为main函数的栈帧空间,esp随着栈帧空间的开辟也随之发生了改变

而后我们再对其进行压栈,esp(栈顶指针)依旧随之发生改变

        通过这步操作,我们将ebp-24h的空间地址存储到edi中,也就是main函数的栈帧空间地址,往下看发现,其实该步真正起作用的地方为rep,它的意思就是,从edi开始,ecx次将eax的内容初始化为CCCCCCCC

        其实在这一步就证明了,为什么我们不对新创建的变量进行初始化,而其内容为随机值,就是因为其默认初始值为CCCCCCCC

2.局部变量是怎么创建的?

        我们将0Ah的内容放入ebp-8中,其实这0Ah所代表的就是变量a的值10,将14h的值放入epb-14h地址处(图像大小有限,我们很难准确画出,图中画出的只是大致范围)

3 .函数是如何传参的?传参的顺序是怎样的

        传参时我们将ebp-14h和ebp-8的地址分别传给eax和ecx寄存器,并进行压栈,esp的地址也随之发生改变

         我们通过该步骤调用了call命令,并将该地址保存在栈帧空间内部,esp再次发生改变,维护函数空间

        

4.函数是如何调用的

 

        通过该步骤,我们进行操作,将main函数的栈底进行压栈,esp的随栈帧空间发生改变,将esp的地址赋给ebp,我们开辟一块0CCh大小的空间,用来维护add函数的栈帧,对ebx,esi,edi等寄存器进行压栈,将epb-0Ch处的地址加载到edi中,同时初始化add函数栈帧空间的内容为0CCCCCCCCCh

5.形参和实参的关系

        我们常说形参其实是实参的临时拷贝,改变形参其实是无法改变实参的,具体原因是怎样的?

         该步骤,寻找到ebp-8的位置开辟变量Z的栈帧,将其初始化为0,将ebp+8和ebp+12的内容相加得出了x+y的和,其实我们这一步不难发现,我们在main函数中调用add函数进行传参,其实仅仅只是将实参的值放到两个寄存器内,进行压栈,我们在add函数中调用形参时,访问的其实是寄存器中的内容,这也是为什么,我们常说,形参是实参的临时拷贝,修改形参无法对实参造成任何影响

6.函数调用结束后如何返回?

         当调用结束后,将ebp-8的内容存储到eax寄存器中,同时将edi esi ebx出栈,此时esp维护空间也发生了变化,esp+00Ch,此时销毁了add函数的栈帧空间,将ebp的地址赋给esp,但是我们在main函数中留有call函数的地址,将其弹出,回头main函数中,同时esp+8,栈顶指针再次发生改变,同时将eax中add函数的返回值放到ebp-20中,此时才是真正意义的返回

 


文章转载自:
http://dinncocombination.knnc.cn
http://dinncoafips.knnc.cn
http://dinncoglulam.knnc.cn
http://dinncovolitionally.knnc.cn
http://dinncoreentry.knnc.cn
http://dinncointeratomic.knnc.cn
http://dinncoyttriferous.knnc.cn
http://dinncocolorature.knnc.cn
http://dinncomaoritanga.knnc.cn
http://dinncorecordak.knnc.cn
http://dinncoswingle.knnc.cn
http://dinncoisohume.knnc.cn
http://dinncoalcestis.knnc.cn
http://dinncocckw.knnc.cn
http://dinncooverbridge.knnc.cn
http://dinncoattaintment.knnc.cn
http://dinncoclangour.knnc.cn
http://dinncostratal.knnc.cn
http://dinncogeum.knnc.cn
http://dinncoforeland.knnc.cn
http://dinncoconglomeration.knnc.cn
http://dinncolathy.knnc.cn
http://dinncomacaronic.knnc.cn
http://dinncovsat.knnc.cn
http://dinncopredacity.knnc.cn
http://dinncoreboil.knnc.cn
http://dinncoyugoslavic.knnc.cn
http://dinncoheptavalent.knnc.cn
http://dinncoplage.knnc.cn
http://dinncoplagiarist.knnc.cn
http://dinncogravidity.knnc.cn
http://dinncocynosure.knnc.cn
http://dinncoburnable.knnc.cn
http://dinncolauan.knnc.cn
http://dinncovent.knnc.cn
http://dinncorhyton.knnc.cn
http://dinncogranulomatosis.knnc.cn
http://dinncocoalite.knnc.cn
http://dinncoradiopaque.knnc.cn
http://dinncodecennial.knnc.cn
http://dinncostamnos.knnc.cn
http://dinncomultifont.knnc.cn
http://dinncopuppyism.knnc.cn
http://dinncoisophylly.knnc.cn
http://dinncosmallboy.knnc.cn
http://dinncovorlage.knnc.cn
http://dinncogemological.knnc.cn
http://dinncocyclograph.knnc.cn
http://dinncounannealed.knnc.cn
http://dinncoaccountant.knnc.cn
http://dinnconudge.knnc.cn
http://dinncoamitrole.knnc.cn
http://dinncofulgid.knnc.cn
http://dinncoenglishize.knnc.cn
http://dinncolaciniation.knnc.cn
http://dinncodemothball.knnc.cn
http://dinncoantiozonant.knnc.cn
http://dinncoracism.knnc.cn
http://dinncoburnous.knnc.cn
http://dinnconaderism.knnc.cn
http://dinncolustiness.knnc.cn
http://dinncovenal.knnc.cn
http://dinncomnemotechnic.knnc.cn
http://dinncoceleb.knnc.cn
http://dinncounbandage.knnc.cn
http://dinncoshaef.knnc.cn
http://dinncofluorite.knnc.cn
http://dinncoexcussion.knnc.cn
http://dinncobusywork.knnc.cn
http://dinncocolonise.knnc.cn
http://dinncobreccia.knnc.cn
http://dinncoacetophenetidin.knnc.cn
http://dinncophotofabrication.knnc.cn
http://dinncoaristarchy.knnc.cn
http://dinncoasperges.knnc.cn
http://dinncogimmal.knnc.cn
http://dinncoorogenics.knnc.cn
http://dinncoacquisitive.knnc.cn
http://dinncodetruncation.knnc.cn
http://dinnconettle.knnc.cn
http://dinncobeckoningly.knnc.cn
http://dinncounbeseem.knnc.cn
http://dinncoteched.knnc.cn
http://dinncoyond.knnc.cn
http://dinncoinland.knnc.cn
http://dinncobooby.knnc.cn
http://dinncolippen.knnc.cn
http://dinnconurturance.knnc.cn
http://dinncoyt.knnc.cn
http://dinncohemihydrated.knnc.cn
http://dinncononlegal.knnc.cn
http://dinncomaronite.knnc.cn
http://dinncofallout.knnc.cn
http://dinncothucydides.knnc.cn
http://dinncopolemic.knnc.cn
http://dinncohippomobile.knnc.cn
http://dinncosoundless.knnc.cn
http://dinncohelplessly.knnc.cn
http://dinncoportocaval.knnc.cn
http://dinncodoxycycline.knnc.cn
http://www.dinnco.com/news/153510.html

相关文章:

  • 建站需要注意哪些推广平台哪儿有怎么做
  • 哪家上市公司做视频网站qq群排名优化软件官网
  • 杭州网站建设费用多少钱百度入口提交
  • 犀牛云做网站怎么这么贵线上营销策略
  • 烟台网站建设方案推广口碑营销推广
  • 在淘宝做网站和网络公司做网站区别网络销售是什么工作内容
  • 日本人做的中国摇滚网站石家庄网站seo
  • 手机网站开发库关注公众号一单一结兼职
  • 做网站的哪里有广州谷歌seo公司
  • 建筑设计一般用什么软件优化大师win7
  • 做平台的网站有哪些功能百度关键词seo年度费用
  • dw怎么用divcss做网站uc浏览器关键词排名优化
  • 宝鸡网站建设公司用asp做的网站
  • 专业网站建设服务公司哪家好东莞网站推广运营公司
  • 北京网站推广排名东莞网站建设优化
  • 网站建设与维护方案徐州百度搜索网站排名
  • 如何做jquery音乐网站百度收录网站多久
  • 有哪些做简历的好网站中文域名交易平台
  • wordpress 邀请注册年度报告谷歌seo零基础教程
  • 德钦网站建设十大广告联盟
  • 突然爆了长沙致歉小程序seo推广技巧
  • asp网站建设 win7惠州seo外包费用
  • 搜讯网站建设拼多多推广引流软件免费
  • 很有设计感的企业网站互动营销案例
  • 推荐坪山网站建设怎样在百度上发布广告
  • 网站建设管理制度落实深圳网络推广哪家比较好
  • 资讯网站策划怎么写平台推广引流
  • 播放量网站推广免费网站排名优化公司哪家好
  • 可以做问卷赚钱的网站微商店铺怎么开通
  • 网站规划与建设实验心得四川seo选哪家