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

山东省住房建设厅网站考试项目Wordpress 实名认证

山东省住房建设厅网站考试项目,Wordpress 实名认证,电影网站建设 流程,天猫注册店铺流程及费用因为c语言遵循的调用约定是cdecl#xff0c;咱们也自然要遵守cdecl约定了。不过为了起到对比的作用#xff0c;除了介绍cdecl外#xff0c;也会介绍下stdcall。 既然咱们用的是调用约定是cdecl#xff0c;那对它的介绍最好让它离下一节的内容近一些#xff0c;所以先说一…因为c语言遵循的调用约定是cdecl咱们也自然要遵守cdecl约定了。不过为了起到对比的作用除了介绍cdecl外也会介绍下stdcall。 既然咱们用的是调用约定是cdecl那对它的介绍最好让它离下一节的内容近一些所以先说一下咱们不用的stdcall吧^_^其实这两个差别就在于由谁来回收栈空间。 stdcall的调用约定意味着 调用者将所有参数从右向左入栈被调用者清理参数所占的栈空间 这两点在上文的表中大家已有所了解下面咱们将理论实践一下还是拿上面说过的函数举例 1 int subtract(int a, int b) //被调用者 2 int sub subtract (3,2); //主调用者 第1行是个函数声明其实现已经在前面看到了就是“return a-b”。 第2行进行函数调用实参分别是3和2。在实际调用中参数按照从右向左的顺序参数b会先被压入栈然后是参数a压入栈。在stdcall调用约定下这个c代码被编译后的汇编语句是 主调用者 ; 从右到左将参数入栈 1 push 2 压入参数b 2 push 3 压入参数a 3 call subtract 调用函数subtract 以上是主调函数现在看下被调函数subtract中做了什么。 被调用者 1 push ebp 压入ebp备份。 2 mov ebp,esp 将esp赋值给ebp 用ebp做为基址来访问栈中参数。 3 mov eax,[ebp0x8] 偏移8字节处为第1个参数a。 4 add eax,[ebp0xc] 偏移0xc字节处是第2个参数b 参数a和b相加后存入eax。 5 mov esp,ebp 为防止中间有入栈操作用ebp恢复esp。 本句在此例子中可有可无属于通用代码。 6 pop ebp 将ebp恢复 7 ret 8 数字8表示返回后使esp8。函数返回时由被调函数清理了栈中参数。 当执行流进入到subtract后在它的内部为了用ebp做为基址引用栈中参数先执行了push ebp来备份ebp再将栈指针赋给了ebp。目前栈中布局如图 大家根据上图很容易地看出ebp偏移为8字节是参数a偏移12字节是参数b。以上代码值得说一下的是ret 8这句。stdcall是被调用者负责清理栈空间这里的被调用者是函数subtract。也就是说subtract需要在返回前或返回时完成。在返回前清理栈相对困难一些清理栈是指将栈顶回退到参数之前。因为返回地址在参数之下ret指令执行时必须保证当前栈顶是返回地址。所以通常在返回时“顺便”完成。于是ret指令便有了这样的变体其格式为 ret 16位立即数 这是允许在返回时顺便再将栈指针esp修改的指令。顺便说一句由于32位下push指令不是压入字就是压入双字所以ret的参数必须是偶数。在ret 8执行之前当前栈顶必须是返回地址即使没有第5行的代码当前esp也是等同于ebp因为之前没有任何push压栈操作这是编译器为了通用性而加进去的所以我们在注释中写到此句可有可无。在经过第6行将栈顶当前esp指向的内存弹出到ebp之后ebp被恢复此时esp指向了4字节的位置。即当前栈顶为主调函数的返回地址。结合上图ret指令将栈顶的数据弹出到寄存器eip后栈指针esp自加4由于还有个参数8所以esp又被加了8从而跳过了参数a和b顺利地完成了被调用者清理栈的任务。 stdcall是调用者在栈中压入参数由被调用者回收栈空间。貌似分工很明确配合很默契。因为被调用者知道自己需要几个参数所以知道要回收多少栈空间。 但转念一想凡事都要自己亲力亲为才放心调用者压入的参数万一被调用者忘记回收栈空间该怎么办这一点由高级语言编译器保证一般不会大伙儿放心本段这么写是为了表述下一种调用约定方式的特点参数多了栈会溢出的。下面咱们就要介绍这种“亲力亲为”的调用约定即调用者自己向栈中压入参数还是由调用者自己回收栈空间。 好啦stdcall调用约定就到此为止。大爷再来玩哦。
http://wiki.neutronadmin.com/news/278726/

相关文章:

  • 哈尔滨寸金网站建设公司口碑酒店专业培训网站建设
  • 如何做一家专门卖零食的网站顺德品牌网站建设咨询
  • 天水模板型网站建设WordPress改成淘宝客
  • 网站解析密码注册一个公司需要几个人
  • joomla做的网站网站服务器类型查询
  • 广州网站建设乐云seo专门做餐饮运营的网站
  • 网站常规seo优化步骤温州制作网站公司
  • 安徽省建设造价管理协会网站张店网站建设yx718
  • 网站后期的维护和更新自己建立网站要钱吗
  • 做网站 怎么连到数据库页面简单的网站模板免费下载
  • 北京网站改版有哪些好处蜘蛛搜索引擎网页版
  • 网站建设 业务网站建设关键词排名优化
  • 大连哪里有手机自适应网站建设wordpress不用登陆就可以评论
  • 标书制作软件免费版seo网站排名推广
  • 赣州网站建设优化服务linux wordpress建站教程
  • 汕头市建设局网站微信自动加好友软件
  • 成功的营销型网站案例wordpress搬到本地
  • 招聘网站开发流程传媒公司网站php源码
  • 大兴手机网站建设正能量不良网站直接进入免费
  • 网站流量的主要来源有微信上如何创建小程序
  • 福建省建设执业资格注册中心网站网页设计与网站建设的区别
  • 旗县政务网站建设工作方案首码圈项目网
  • 泰安浩龙网站开发公司简介样本
  • 国内跨境电商建站系统网站建设的条件
  • f2c网站建设哪个网站 的域名最便宜
  • 电商网站制作流程重庆搜索引擎推广公司
  • 北京移动网站建设公司朝阳区社区建设网站
  • 网站的轮播怎么做的html5 网站logo
  • 本地wordpress模板编辑怎么做网站seo
  • 官方查企业信息的网站自定义wordpress 登录