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

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

作者: 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,参数所占的空间,如果这步没有执行,那么参数会越来越多,导致栈内存溢出)

相关文章

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

    我们知道递归函数在某些条件下会造成内存的溢出,导致程序崩溃,这是为什么呢?函数在内存中的执行过程又是怎么样的呢?看...

  • 程序调用过程和堆栈的关系,为什么要传地址而不传值

    bug.c 使用gdb调试,main函数反汇编的代码 swap函数的反汇编代码 在执行到call swap函数之前...

  • Chapter 1:CPU?

    基本的汇编语言语法汇编语言、本地语言与源代码关系内存与程序的关系CPU的执行特性函数执行的时候执行的方式,参数,返...

  • 2019-04-21

    stepi 汇编指令一行一行执行nexti 跳过函数

  • 十一.函数

    return的作用是:返回到调用函数的下一句函数,然后执行;assembly 汇编 disassembly 反...

  • UIWindow的创建过程

    在有storyboard中的创建过程: 先执行Main函数,执行UIApplicationMain(),根据其第三...

  • 代码的编译过程

    预处理 编译生成汇编代码 源码->汇编 汇编生成目标文件 链接各种库才能产生最终的正确可执行文件 编译的过程 假如...

  • 面向对象是进阶非常重要的一环!给我五分钟让你完全掌握!

    过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概...

  • Python面向对象之面向对象基本概念

    过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概...

  • 2019-03-29

    1.开始执行函数: 2.进入到反汇编: 3.按F11键单步执行:蓝色框框圈住的,准备调用sum函数 4.调用sum...

网友评论

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

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