zoukankan      html  css  js  c++  java
  • 堆栈平衡

    一.什么是堆栈平衡

    含义就是 当函数在一步步执行的时候 一直到ret执行之前,堆栈栈顶的地址 一定要是call指令的下一个地址。

    也就是说函数执行前一直到函数执行结束,函数里面的堆栈是要保持不变的。

    如果堆栈变化了,那么,要在ret执行前将堆栈恢复成原来的样子。

    第一种情况:push影响堆栈

    比如 call  ...

    函数:mov ...                         (不影响堆栈平衡)

         push.....                      (影响堆栈平衡)

              ret.....             

     

    第二种情况:堆栈传递参数

    ......

     

     堆栈如下:

     因为PUSH 1 PUSH 2 是为了函数传参而准备的 ,当函数执行完成后 ,push1,push2 就都没用了,所以要把堆栈恢复到执行前的位置

    两种解决办法 :函数外部处理和内部处理

    第一种 :在函数外部添加ADD处理

           第二种:在函数内部添加

     ret 8 是把 ret 和第一种情况的add 两条指令整合成一条指令,在函数内部完成堆栈平衡。

  • 相关阅读:
    python中的继承和多态
    python中的深浅copy
    面向对象初识
    常用模块,异常处理
    递归,re,time,random
    内置函数,匿名函数
    生成器和迭代器
    记一次nginx由于文件过大的相关问题
    vue的Element+gin实现文件上传
    Vue问题汇总
  • 原文地址:https://www.cnblogs.com/cat47/p/12285209.html
Copyright © 2011-2022 走看看