窗口调用约定
Windows calling conventions
嗨,一个朋友告诉我:
调用约定是 C++ 函数说明符,用于确定调用另一个函数的函数是否应清理堆栈帧,或者这是被调用函数的工作
这是真的吗?
还有清洁部分将如何 在程序集中查找调用另一个 syscall 函数的程序集?
提前谢谢。
从历史上看,Fortran 和 Pascal 语言使用一种约定,其中调用方将其参数推送到堆栈上(堆栈中的第一个参数(,然后调用被调用方函数。被调用方中的序言代码通常会弹出返回地址和参数,然后再次推送返回地址(这部分实际上是一个实现细节(。当被调用方返回时,堆栈是干净的。
然后,C 语言具有调用具有可变参数数量的函数的能力。约定是调用方按相反顺序推送参数(堆栈中的最后一个参数首先推送(,然后调用被调用方函数。然后,被调用方访问堆栈中的参数而不弹出任何内容(第一个参数的地址刚好靠近返回地址(。当被调用方返回时,堆栈仍包含参数,调用方应清理它们。
这仍然在Windows系统中使用,其中大多数API函数使用帕斯卡约定(winapi
(,而默认情况下C或C++方法默认使用C(cdecl
(约定。
相关文章:
- 为什么在 x64 中忽略__stdcall调用约定?
- 窗口调用约定
- 我应该提到纯虚函数中的调用约定吗?
- 如何使用gcc指定stdcall调用约定
- Clang:x86 FPU调用约定
- 该标准是否说明了例外和不同调用约定的共存
- Clang++的InterlockedExchange的32位调用约定错误,但MSVC可以
- std::sort & comp - 调用约定?
- 如何为类 /块 /范围选择C 调用约定
- DLL 的"good"调用约定是什么?
- 结构中重载运算符的调用约定
- 'ShowSUM':__declspec(dllexport)不能应用于具有__clrcall调用约定的函数
- x86-64 调用约定中的返回值
- 内联功能和调用约定
- 正在直接显示筛选器中调用约定
- 何时使用`__fastcall`调用约定
- 为C++结构定义显式析构函数如何影响调用约定
- 对类方法的正确约定调用
- 如何使用 Visual C++ 中的 Delphi 寄存器调用约定调用函数?
- 使用C调用约定调用函数模板专门化