汇编对比函数参数进堆栈顺序

Posted alhope

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编对比函数参数进堆栈顺序相关的知识,希望对你有一定的参考价值。

1、C语言函数参数是按照倒序进栈,即函数调用时,最右边的参数最先压栈,由调用者恢复堆栈指针。

 

2、Pascal语言函数约定和C约定正好相反,它规定参数是从左向右传递,由被调用者恢复堆栈。

 

3、 __stdcall 这是一种函数调用方式。 __stdcall方式函数的参数压栈顺序从右到左,是Pascal 缺省调用方式,通常用于win32 API中,自己在退出时清空栈。

    __stdcall将参数压栈是按C语言的顺序(从右到左),但与C语言不同的是它是由被调用者将参数从栈中清除,所以它的编译文件比_cdecl小。

    __stdcall是Windows  API函数中默认的调用约定,VB、VFP等也采用这个约定。

    __cdecl是C语言采用的默认调用方法,对于传送参数的内存栈却是由调用者来维护的。实现可变参数的调用只能用该方法。是MFC的缺省调用参数。

    __fastcall方式的函数采用寄存器传递参数,VC将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。

以上是关于汇编对比函数参数进堆栈顺序的主要内容,如果未能解决你的问题,请参考以下文章

了解 C/C++ 中函数调用的堆栈框架? [关闭]

如何查看DLL中的函数信息

20145234黄斐《信息安全系统设计基础》GDB调试汇编堆栈过程分析

Clang:通过内联汇编获取函数的参数

结构体作为参数的反汇编

如何在汇编程序 x86 函数调用中传递参数?