函数分析

DeeLMind小于 1 分钟

函数分析

函数调用

调用约定参数传递顺序谁清理栈特点
cdecl从右到左调用者最常见,支持可变参数
stdcall从右到左被调用者Windows API 默认
fastcall前两个参数通过寄存器(ECX、EDX),剩余右到左入栈被调用者提高效率
thiscallECX 传递 this 指针,其余从右到左入栈被调用者C++ 成员函数默认
__vectorcall参数优先使用寄存器传递,支持 SIMD被调用者新的高性能约定
syscall系统调用系统约定内核调用
x64 通用RCX, RDX, R8, R9(前四参数传寄存器)剩余入栈被调用者Windows x64 默认
寄存器用途
EAX函数返回值寄存器
ECXfastcall 第一个参数、thiscall 的 this 指针
EDXfastcall 第二个参数
ESP栈顶指针
EBP栈基址(常用于栈帧指针)
参数位置传递方式
第 1 个RCX
第 2 个RDX
第 3 个R8
第 4 个R9
第 5 个及之后入栈

缓冲区分配

  • cdecl 调用者清,stdcall 被调清;
  • fastcall 用寄存,thiscall ECX;
  • 参数右到左,返回靠 EAX;
上次编辑于:
贡献者: DeeLMind