• 函数调用


      如果一个第三方提供的函数要能被使用,那么必须有约定的函数调用规则。

    函数调用规则指的是调用者和被调用函数间传递参数及返回参数的方法

    在windows上,常用的有 pascal方式 ,WINAPI 方式(_stdcall),C方式(_cdecl)

    _cdecl C调用规则:

      参数从右到左进入堆栈

      在函数返回后,调用者要负责清除堆栈

    _stdcall WINAPI调用规则:

      参数从右到左进入堆栈

      被调用的函数在返回前自行清理堆栈,所以生成的代码比cdecl小

    Pascal 调用规则:win16函数库中的规则,现在基本弃用。

    在C语言的程序中,堆栈用来传递函数参数

    dword 双字 就是四个字节

    ptr pointer缩写 即指针

    []里的数据是一个地址值

    这个地址指向一个双字型数据

    比如mov eax, dword ptr [12345678]

    把内存地址12345678中的

    双字型(32位)数据赋给eax

    _cdecl 方式下  被调用函数 需要

    1 .保存ebp

    ebp 被用来保存这个函数执行之前的esp地址

    执行完毕后,用ebp 恢复 esp

    同时,调用此函数的上层函数也用ebp做同样的事情

    所以先把ebp压入堆栈中

    返回之前弹出

    2 .保存esp 到 ebp 中

    3. 在堆栈中腾出一个区域用来保存局部变量

    这就是常说的所谓局部变量是保存在栈空间中的

  • 相关阅读:
    【题解】UOJ61. 【UR #5】怎样更有力气
    【题解】Kruskal重构树——[NOI2018] 归程
    图论补档——KM算法+稳定婚姻问题
    NOIP2018 提高组题解
    杂物
    朱刘算法学习笔记
    文化课の疑难杂症
    FHQ简要笔记
    题解 AT3877 【[ARC089C] GraphXY】
    CSP-S 2020 退役记
  • 原文地址:https://www.cnblogs.com/Cheetos/p/5396044.html
Copyright © 2020-2023  润新知