美文网首页
汇编代码——函数调用原理

汇编代码——函数调用原理

作者: 番薯大佬 | 来源:发表于2017-07-22 00:33 被阅读72次

汇编代码中函数的调用过程

  • push 参数:64位 CPU 任性使用寄存吕
  • call 指令调用:将下一条指令地址入栈
  • 保护 bp 寄存器
push bp
  • 将 sp 赋值给 bp
mov bp,sp
  • 提升 sp 指针(sp 减去值),作为局部变量空间,即分配栈空间
  • 保存寄存器
push bx
push cx
push dx
  • 业务逻辑:实现功能
  • 恢复寄存器
pop dx
pop cx
pop bx
  • 恢复 sp 指针(sp 加上值)
  • sp 指向 bp
mov sp,bp
  • 恢复 bp
pop bp
  • ret 返回
ret

注意

  • 先 push 入栈的最后 pop 出栈
  • 栈指针sp 恢复时有两种方法
    • 重指向bp
    • 减多少值,就加回多少值

相关文章

  • 汇编代码——函数调用原理

    汇编代码中函数的调用过程 push 参数:64位 CPU 任性使用寄存吕 call 指令调用:将下一条指令地址入栈...

  • Linux boot的第一步:启动汇编调用main函数

    为了讲清原理,我们首先介绍C函数调用机制,然后再介绍汇编调用C函数。 一、C函数调用机制 对于汇编中的函数,其使用...

  • 多态--虚函数

    1.通过对象调用成员函数(无虚函数) 源代码 反汇编代码 2. 通过对象调用成员函数(有虚函数) 对比发现通过对象...

  • weak 的实现

    代码如下 转成汇编 调用了 _objc_initWeak 和 _objc_destroyWeak 函数去runt...

  • c++:拷贝构造函数&&深浅拷贝

    默认拷贝构造函数的汇编代码: 其实就相当于这一段代码 拷贝构造函数 多态拷贝构造函数 子类拷贝构造函数调用父类拷贝...

  • C语言2-参数的传递与返回值

    C语言2-参数的传递与返回值 plus函数对应反汇编代码和意义 调用函数调用: 下面是call内部 堆栈没有变化 ...

  • 带你弄懂 call 指令调用方式

    当我们使用高级语言调用一个函数 func() 时,在编译为汇编代码后,实际上是调用了 call 指令。伪代码如下:...

  • 从汇编代码理解函数调用过程

    如何理解函数调用过程?本文把一个简单的C语言程序汇编成目标代码,然后用objdump目标文件反编译成的汇编代码,从...

  • 汇编-----函数的本质

    通过汇编代码我们可以探索函数的本质 1: 如果函数内部没有调用其他函数, 那么sp不会进行偏移, 编译器会通过mo...

  • iOS:懒加载符号绑定流程

    1. 桩函数的出现 首先在 main 函数中打断点: 开启汇编调试,运行代码,结果如下: 上图可知调用 NSLog...

网友评论

      本文标题:汇编代码——函数调用原理

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