函数调用

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

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

在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. 在堆栈中腾出一个区域用来保存局部变量

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

 

转载于:https://www.cnblogs.com/Cheetos/p/5396044.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值