C语言中的函数调用

 2024-02-29 04:05:45  阅读 0

在SDK中输出API函数时,我们经常使用函数约定。 在WIN32中,它被定义为函数调用契约。 功能有很多种。 这里简单介绍一下。 在程序软件中,要注重内容分析。 :

1、调用约定相当于16位动态库常用的调用约定。 在 32 位 VC++ 5.0 中,不再支持调用约定(实际上它已被定义为 ,并且也不支持)并已被调用约定取代。 两者本质上是一样的,即函数的参数从右向左通过栈进行传递,被调用函数在返回前将传递参数的内存栈清空,但不同的是函数修改的部分name(关于函数名的修改部分,后面会详细解释)。 【软件破解教程】

调用语句格式_c语言中调用是什么意思_c语言中调用语句

它是程序默认的调用方式,通常用于Win32 API。 函数从右到左使用出栈方法,退出时清空堆栈。 VC编译函数后,会在函数名前面添加下划线前缀,在函数名后面添加“@”和参数的字节数。

2. C 调用约定(即使用关键字)将参数从右向左压入堆栈,调用者将参数从堆栈中弹出。 用于传递参数的内存堆栈由调用者维护(因此,实现可变参数的函数只能使用此调用约定)。 另外,函数名修饰的约定也存在差异。 【软件破解教程】

调用语句格式_c语言中调用是什么意思_c语言中调用语句

它是C和C++程序的默认调用方式。 每个调用它的函数都包含清除堆栈的代码,因此生成的可执行文件大小将大于调用函数。 函数从右到左压入堆栈。 VC编译函数后,会在函数名前添加下划线前缀。 这是MFC默认的调用约定。

3. 调用约定正如其名,是“人类”的。 它的主要特点是速度快,因为它通过寄存器传输参数(事实上,它使用ECX和EDX来传输前两个双字(DWORD)或更小的参数。,其余参数仍然从右到右压入堆栈左,被调用函数在返回之前清除传输参数的内存堆栈)。 在函数名修饰约定方面,与前两者有所不同。

该模式下的函数使用寄存器来传递参数。 VC编译函数后,会在函数名前面添加“@”前缀,在函数名后面添加“@”和参数的字节数。

4. 仅适用于“C++”成员函数。 this指针存放在CX寄存器中,参数从右向左按。 不是关键字,因此程序员无法指定。

5. 当裸调用使用1-4的调用约定时,如果需要,编译器会在进入函数时生成保存ESI、EDI、EBX、EBP寄存器的代码,并在进入函数时生成恢复这些寄存器内容的代码退出该功能。 裸调用不会生成此类代码。 bare call 不是类型修饰符,因此必须与 with 一起使用。

标签: 函数 调用 参数

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码