(一) __cdecl: c declaration

  C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。C/C++默认的调用方式,可用于函数参数不确定的情况下。

  1. 被调用函数代码及反汇编:

int _cdecl fun(int arg){//被调用者

	return arg+1;
} push ebp
mov ebp, esp
  ¦  ¦
mov esp, ebp
pop ebp
retn  ;被调用者不清除参数
fun endp

  2.调用代码及反汇编:

int main(int argc, char* argv[],int _version)//调用者
{
int _a=208;
_a=fun(_a);//调用
std::cout<<_a<<std::endl;
return 0;
}   var_4= dword ptr -4 ;变量_a的地址偏移量     ¦  ¦   rep stosd
  mov [ebp+var_4], 0D0h
  mov eax, [ebp+var_4]  
  push eax  ;实参_a压栈
  call j_fun  ;调用函数fun(_a)
  add esp, 4  ;调用者main函数清除实参_a,恢复栈

  

  

(二) __stdcall: standard calling

  参数从右向左通过堆栈传递的, 函数调用在返回前要由被调用者清理堆栈。

  1. 被调用函数代码及反汇编:

int __stdcall fun(int arg){//被调用者

	return arg+1;
} push ebp
mov ebp, esp
  ¦  ¦
mov esp, ebp
pop ebp
retn  4;被调用者清除参数。对比上述。
fun endp

  

  2.调用代码及反汇编:

int main(int argc, char* argv[],int _version)//调用者
{
int _a=208;
_a=fun(_a);//调用
std::cout<<_a<<std::endl;
return 0;
}   var_4= dword ptr -4 ;变量_a的地址偏移量     ¦  ¦   rep stosd
  mov [ebp+var_4], 0D0h
  mov eax, [ebp+var_4]  
  push eax  ;实参_a压栈
  call j_fun  ;调用函数fun(_a)   ;调用者不恢复栈
    ¦  ¦

  

最新文章

  1. ACEXML解析XML文件&mdash;&mdash;我是如何学习并在短时间内掌握一个库的使用方法的
  2. IIS mime类型 任意类型
  3. 【6_100】Same Tree
  4. bzoj1040
  5. Quartz实现定时任务的配置方法
  6. 不可或缺的企业OA面临问题,以及解决建议 软件定制开发 森普演示平台
  7. Qt控件精讲一:按钮
  8. POJ 2777 Count Color(线段树+位运算)
  9. 根据相同的字段创建或者修改一个Model
  10. 高效判断奇偶性,利用位运算符&amp;
  11. c语言中的文件格式化读写函数fscanf和fprintf函数
  12. 笔记:Maven 下载和安装
  13. 安卓高级6 玩转AppBarLayout,更酷炫的顶部栏 Toolbar
  14. maven入门 (二)_私服安装与上传下载
  15. 机器学习web服务化实战:一次吐血的服务化之路
  16. 获取windows凭证管理器明文密码
  17. [图文教程]VS2017搭建opencv &amp; C++ 开发环境
  18. 为已经存在的本地项目添加git,以及从远程仓库拉取代码并切换远程分支
  19. centos7 安装docker-ce ,最新版本docker,docker阿里云加速
  20. Windows10系统tensorflow-gpu安装

热门文章

  1. eclipse中web项目部署到本地tomcat中,但是在本地的tomcat的webapp下找不到发布的项目
  2. springboot项目支持war部署tomcat
  3. Rem是什么,牛逼的Vue,Epub竟然可以实现阅读器功能。太牛了。
  4. Ngnix学习笔记
  5. Spring Boot入门——JDBCTemplate使用及其相关问题解决
  6. PyCharm 的初始设置1
  7. SQL授权语句(MySQL基本语句)
  8. php/oracle: 解析oracle表中的NCLOB,CLOB字段里面的内容
  9. Asp.net 检测到有潜在危险的 Request.From值
  10. Amazon EMR(Elastic MapReduce):亚马逊Hadoop托管服务运行架构&amp;Hadoop云服务之战:微软vs.亚马逊