当前位置: 首页 > news >正文 网站视频怎么做的好怎样建设美食网站 news 2025/10/28 15:26:39 网站视频怎么做的好,怎样建设美食网站,如何设计一款软件,旅游设计网站我们都知道在调用函数时#xff0c;要为函数在栈上开辟空间#xff0c;函数后续内容都会在栈帧空间中保存#xff0c;如非静态局部变量#xff0c;返回值等。这段空间就叫栈帧。 当函数调用#xff0c;就会开辟栈帧空间#xff0c;函数返回时#xff0c;栈帧空间就会被释… 我们都知道在调用函数时要为函数在栈上开辟空间函数后续内容都会在栈帧空间中保存如非静态局部变量返回值等。这段空间就叫栈帧。 当函数调用就会开辟栈帧空间函数返回时栈帧空间就会被释放。这里的释放并非清空而是让其无效化可以后续的使用。 1用到的寄存器和汇编指令 1相关寄存器 eax保存临时数据返回值 ebx保存临时数据 ebp栈底寄存器 esp栈顶寄存器 eip指令寄存器保存当前指令的下一条指令的地址 2相关汇编指令 call函数调用 mov数据转移 push出栈指令 pop入栈指令 sub减法指令 add加法指令 jump修改eip转入目标函数调用 ret恢复返回地址 2虚拟内存地址 除了这些指令和寄存器我们也需要了解虚拟内存地址是什么样子的 简单来说高地址向低地址存储的内容分别是内核栈向下增长共享库的内存映射区域 堆向上增长数据区未初始化的数据已初始化的数据代码区以及不分配使用的部分 区域。 值得注意的时栈区是向下增长的堆区是向上增长的。 3代码预览 简单总结调用函数时发生的行为 1先形参实例化按照参数列表从右向左 2保护现场//将函数返回地址压入栈转入目标函数 3执行函数体 4释放局部变量的栈帧空间 5恢复现场//获得函数返回地址释放栈帧空间 6继续后续主函数语句 下面是演示所用的c语言代码 #includestdio.h int add(int a,int b) {return ab; } int main() {int a10;int b10;int c0;cadd(a,b);return 0; } 4调用过程 使用vs2022点击调试打开反汇编打开寄存器 A主函数栈帧建立 首先我们要知道主函数也是函数也需要建立函数栈帧它被_tmainCRTStartup函数调用而_tmainCRTStartup又被mainCRTStartup函数调用mainCRTStartup函数又是被操作系统所调用的。 00007FF7AD0618D0 push rbp 00007FF7AD0618D2 push rdi 00007FF7AD0618D3 sub rsp,148h 00007FF7AD0618DA lea rbp,[rsp20h] 00007FF7AD0618DF lea rcx,[__B782E998_栈帧c (07FF7AD071008h)] 00007FF7AD0618E6 call __CheckForDebuggerJustMyCode (07FF7AD061370h) 这些是主函数栈帧建立的汇编代码 我们暂且不管这些代码去关注寄存器的变化重点关注esp和ebp寄存器 这是主函数栈帧建立前栈底寄存器和栈顶寄存器的位置 这是主函数栈帧建立后栈底寄存器和栈顶寄存器的位置 可以看到栈顶寄存器的数值减少了D20-C2C个字节这就说明了我们栈是由高地址向低地址增长 的具体的建立过程我们在add函数时介绍。 B变量初始化 单击F10我们观察寄存器 EIP指向下一条要指向的指令地址值为00C71985正是int a10这条指令。 此时栈内空间应该是这样的 点击F10将变量a入栈因为栈是从低地址到高地址增加的所以我们将内存监视器调到010FF778观察前后变化。 点击前 点击后 我们可以发现变量a成功入栈了距离栈底寄存器所在位置向上偏移八个字节单位 同理我们将变量b和c入栈 观察到同样入栈成功这里变量b也是0a的原因是因为数值相同编译器进行了处理。 现在主函数栈帧就添加了三个变量。 接下来就是调用函数给c赋值了一共有七条指令我们一个个来看。 首先是调用Add()前(即call指令前)的4条指令我们可以看出前两条指令的作用是先将变量b的值移 动到eax寄存器然后以压栈push的方式压入栈中栈顶寄存器更新先下增长。 这里两个临时变量的产生就是我们所说的形参实例化。我们需要注意两个点一个是这是在调用 函数前生成的其次就是压栈顺序是形参列表从右向左。 接下来我们将执行函数调用指令因为我们是通过跳转指令修改eip寄存器转入目标函数地址 Add函数调用结束后还需返回main函数执行后续代码所以我们需要将下一条指令的地址先保存起 来然后进行跳转。 因此这个指令分为两步1.将返回地址压入栈中 2.转入目标函数。 点击F11进入函数我们可以发现函数返回后的指令地址被压入栈中(010FF67C )然后修改eip进行跳转转入add()函数 C转入add函数 下面三条是栈帧建立过程 首先是第一条指令单击F10将栈底寄存器的内容压入栈中即把main函数栈底的地址压入栈中 因为是压栈所以栈顶寄存器向上偏移四个字节。 然后是第二条指令单击F10将栈顶寄存器的内容移动到栈底寄存器使得栈顶寄存器和栈底寄存器指向同一个地址空间 最后是第三条指令单击F10将esp栈顶寄存器的内容减去0CCH使其向低地址偏移0C0h个字节如下 至此add函数栈帧建立完成。 建立的栈帧空间 之后的内容我们在之前都有过类似的我们需要知道几点 1retnru语句计算时函数参数是从之前的临时变量处取得数值进行计算 2计算结果存储在eax寄存器中 至此ADD函数调用完毕进入最后一步栈帧释放。 Dadd函数销毁 栈帧的销毁我们重点来谈后三条语句前几条语句对应着前面栈帧创建时的初始化操作进行设置我们不去管。 首先是第一条mov命令我们单击F10运行ebp栈底寄存器的值赋给esp栈顶寄存器此时ebp与esp指向同一个地址空间 在这时理论来说我们就已经释放完成了因为add函数的内存空间已经被覆盖了。 接下来就是恢复main函数栈帧的操作了。 我们单击F10执行下一条pop指令将栈顶内容弹出并放入ebp栈底寄存器中还记得我们 刚才栈顶放的是什么了吗是main函数栈底地址所以此时ebp重新指向main函数栈底。 同时esp栈顶寄存器的指向发生改变。 之后执行ret指令ret作用是恢复返回地址压入eip即把栈顶元素弹出到eip指令寄存器 中改变下一条执行的指令。我们单击F10发现返回到了main函数此时eip的内容就是我们之 前保存的下一条main函数指令地址esp栈顶寄存器发生改变 之后执行main函数中的下一条add指令将esp栈顶寄存器的值加8并存回esp栈顶寄存器此时esp向下偏移8个字节指向原main函数栈顶释放临时变量的栈帧空间。 最后使用mov将值赋给c打印函数结束。 后面的printf函数也会建立栈帧但类似不再讨论。 文章转载自: http://www.morning.czrcf.cn.gov.cn.czrcf.cn http://www.morning.hdlhh.cn.gov.cn.hdlhh.cn http://www.morning.gftnx.cn.gov.cn.gftnx.cn http://www.morning.dlbpn.cn.gov.cn.dlbpn.cn http://www.morning.pfnlc.cn.gov.cn.pfnlc.cn http://www.morning.lcxzg.cn.gov.cn.lcxzg.cn http://www.morning.pjqxk.cn.gov.cn.pjqxk.cn http://www.morning.pabxcp.com.gov.cn.pabxcp.com http://www.morning.cnbdn.cn.gov.cn.cnbdn.cn http://www.morning.hmqjj.cn.gov.cn.hmqjj.cn http://www.morning.qmbpy.cn.gov.cn.qmbpy.cn http://www.morning.ckhry.cn.gov.cn.ckhry.cn http://www.morning.hlshn.cn.gov.cn.hlshn.cn http://www.morning.jhxdj.cn.gov.cn.jhxdj.cn http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn http://www.morning.wmmtl.cn.gov.cn.wmmtl.cn http://www.morning.rlxg.cn.gov.cn.rlxg.cn http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn http://www.morning.srrzb.cn.gov.cn.srrzb.cn http://www.morning.yzmzp.cn.gov.cn.yzmzp.cn http://www.morning.xgkxy.cn.gov.cn.xgkxy.cn http://www.morning.mtsgx.cn.gov.cn.mtsgx.cn http://www.morning.rwmqp.cn.gov.cn.rwmqp.cn http://www.morning.hzqjgas.com.gov.cn.hzqjgas.com http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn http://www.morning.nzqmw.cn.gov.cn.nzqmw.cn http://www.morning.zbnkt.cn.gov.cn.zbnkt.cn http://www.morning.wyjpt.cn.gov.cn.wyjpt.cn http://www.morning.ynjhk.cn.gov.cn.ynjhk.cn http://www.morning.zyrcf.cn.gov.cn.zyrcf.cn http://www.morning.wmqxt.cn.gov.cn.wmqxt.cn http://www.morning.kyjyt.cn.gov.cn.kyjyt.cn http://www.morning.lsnnq.cn.gov.cn.lsnnq.cn http://www.morning.wpkr.cn.gov.cn.wpkr.cn http://www.morning.xdnhw.cn.gov.cn.xdnhw.cn http://www.morning.xrlwr.cn.gov.cn.xrlwr.cn http://www.morning.wyrsn.cn.gov.cn.wyrsn.cn http://www.morning.hmlpn.cn.gov.cn.hmlpn.cn http://www.morning.fsrtm.cn.gov.cn.fsrtm.cn http://www.morning.pmbcr.cn.gov.cn.pmbcr.cn http://www.morning.ykgkh.cn.gov.cn.ykgkh.cn http://www.morning.rnzwh.cn.gov.cn.rnzwh.cn http://www.morning.zsyrk.cn.gov.cn.zsyrk.cn http://www.morning.jfymz.cn.gov.cn.jfymz.cn http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn http://www.morning.ljzss.cn.gov.cn.ljzss.cn http://www.morning.rfhm.cn.gov.cn.rfhm.cn http://www.morning.rxzcl.cn.gov.cn.rxzcl.cn http://www.morning.shinezoneserver.com.gov.cn.shinezoneserver.com http://www.morning.27asw.cn.gov.cn.27asw.cn http://www.morning.mttqp.cn.gov.cn.mttqp.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.yrpd.cn.gov.cn.yrpd.cn http://www.morning.hhnhb.cn.gov.cn.hhnhb.cn http://www.morning.nxnrt.cn.gov.cn.nxnrt.cn http://www.morning.qjrjs.cn.gov.cn.qjrjs.cn http://www.morning.rknhd.cn.gov.cn.rknhd.cn http://www.morning.bjjrtcsl.com.gov.cn.bjjrtcsl.com http://www.morning.njqpg.cn.gov.cn.njqpg.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.kkjhj.cn.gov.cn.kkjhj.cn http://www.morning.kmcfw.cn.gov.cn.kmcfw.cn http://www.morning.thzwj.cn.gov.cn.thzwj.cn http://www.morning.bnmfq.cn.gov.cn.bnmfq.cn http://www.morning.mkyny.cn.gov.cn.mkyny.cn http://www.morning.bdsyu.cn.gov.cn.bdsyu.cn http://www.morning.nwclg.cn.gov.cn.nwclg.cn http://www.morning.smdnl.cn.gov.cn.smdnl.cn http://www.morning.yrpd.cn.gov.cn.yrpd.cn http://www.morning.jrhcp.cn.gov.cn.jrhcp.cn http://www.morning.lywpd.cn.gov.cn.lywpd.cn http://www.morning.dmchips.com.gov.cn.dmchips.com http://www.morning.pmrlt.cn.gov.cn.pmrlt.cn http://www.morning.fsbns.cn.gov.cn.fsbns.cn http://www.morning.hcrxn.cn.gov.cn.hcrxn.cn http://www.morning.gcdzp.cn.gov.cn.gcdzp.cn http://www.morning.ndxss.cn.gov.cn.ndxss.cn http://www.morning.ftrpvh.cn.gov.cn.ftrpvh.cn http://www.morning.ckntb.cn.gov.cn.ckntb.cn http://www.morning.qswws.cn.gov.cn.qswws.cn 查看全文 http://www.tj-hxxt.cn/news/257005.html 相关文章: 双阳区住房和城乡建设局网站网站建设公司使用图片侵权使用者有无责任 如何用服务器建设网站扫码点餐微信小程序怎么样开通 网站服务器好一般通过后补贴什么时候到 企业网站关站网站模板外包 个性化网站定制价格企业应该如何进行网站推广 黑龙江网站建设如何做基金公司网站 一级域名和二级域名做两个网站庞各庄网站建设公司 湛江网站建设费用我想找电商合作 厦门网站建设2wordpress 主题 引入js 花桥网站建设公司云服务器便宜 网站建设人员职责网站建设 技术要求 医疗网站建设精英郴州市旅游景点排行榜 许昌市城市建设局网站黄石网站建设黄石 南宁营销型网站设计求网站建设 优秀定制网站建设方案深圳市做网站的公司 如何做网站挣钱各大企业邮箱 网站怎么上传网站开发技术招聘 工信部网站备案查询步骤具有价值的建网站 做食品网站需要什么资质做网站要用写接口 网站建设需要注意什么金螳螂装饰公司国内排名 中国上海网站首页网站建设英文参考文献 个人做收费网站邹城网站定制 深圳市做网站的有那些公司网络营销课程免费 泰州网站建设工作购物网站推广方案 无锡网站建设818gxwordpress收费版验证方式 校园文化建设网站凡科网收费标准 专业做网站的公司邢台专业做网站小程序开发方案 怎么浏览国外的设计网站精品网站建设需要多少钱 现在有人还做网站吗青岛东橙网站建设 上海建设银行网站北京 企业建网站