美文网首页
汇编三(函数的执行过程)

汇编三(函数的执行过程)

作者: BigBowen | 来源:发表于2018-03-07 10:04 被阅读19次

    我们知道递归函数在某些条件下会造成内存的溢出,导致程序崩溃,这是为什么呢?函数在内存中的执行过程又是怎么样的呢?看完下面的步骤会给你一个比较清晰的认识:

    从汇编的角度看函数的执行过程:

    image.png
    ; 函数的调用流程(内存),整个过程在栈中执行
    ; 1.push 参数(外界传进函数的参数)
    ; 2.push 函数的返回地址(即函数下一条指令的地址,函数执行完到ret时会pop出来)
    ; 3.push bp (保留bp之前的值,方便以后恢复,方便跳转回bp在原来函数中的位置,即类似于4步中sp赋值给bp的位置)
    ; 4.mov bp, sp (保留sp之前的值,方便以后恢复)
    ; 5.sub sp,空间大小 (分配空间给局部变量)
    ; 6.保护可能要用到的寄存器
    ; 7.使用CC(int 3)填充局部变量的空间  
    
    ; 8.--------执行业务逻辑--------      
    
    ; 9.恢复寄存器之前的值(没有保护寄存器时则不用)
    ; 10.mov sp, bp (恢复sp之前的值)
    ; 11.pop bp (恢复bp之前的值)
    ; 12.ret (将函数的返回地址出栈,执行下一条指令)
    ; 13.恢复栈平衡 (add sp,参数所占的空间,如果这步没有执行,那么参数会越来越多,导致栈内存溢出)
    

    相关文章

      网友评论

          本文标题:汇编三(函数的执行过程)

          本文链接:https://www.haomeiwen.com/subject/rlorfftx.html