zoukankan      html  css  js  c++  java
  • 0day学习笔记(2)--函数调用

    函数调用过程

    • 调用函数操作
      1. 函数参数入栈(在当前函数栈帧),从左至右或从右至左视情况而定
        • 一般为从右至左
        • mov 地址,参数 的一个操作并不直接pop而是定位到地址将参数传递进去
      2. call offset: 调用函数,call标识符或地址.同时为要调用的函数开辟新的栈帧
        • 向栈中压入当前指令的地址,即返回地址
        • 跳转到调用函数的入口地址
        • 返回的时候有类似retn的操作
      3. 调整栈顶和栈底
        • push ebp:将上一个函数栈底入栈,在上一个函数的栈顶
        • mov ebp,esp
        • sub esp ,10h:10h指的是新栈的大小
      4. 一系列新的函数的操作…
      5. 调用结束:
        • leave : 调整栈帧的指令
          • mov esp,ebp
          • pop ebp
        • retn:
          • POP EIP
          • jmp offset
    • 调用main函数时有and esp, 0FFFFFFF0h: 字节对齐(16位)的一个操作,编译优化需要
      在这里插入图片描述在这里插入图片描述
    • 返回地址
    • 将要调用函数的参数2
    • 将要调用函数的参数1
    • 当前函数的一系列变量,参数,地址
    • 以上即是调用完一个函数后属于上一个函数的栈空间的内容
  • 相关阅读:
    8-JS闭包、回调实例
    7-闭包、回调
    6-JS函数(二)
    5-JS函数
    4-JS对象
    3-WebPack
    2-Babel
    1-NPM
    25-React事件处理及条件渲染
    java初始化笔记
  • 原文地址:https://www.cnblogs.com/l0nmar/p/12553847.html
Copyright © 2011-2022 走看看