10.1. 调用机制

10.1.1. 调用惯例

  • cdecl
    • 函数调用方出栈

    • 传参从右至左入栈

    • 名称修饰使用下划线+函数名

  • stdcall
    • 函数本身出栈

    • 传参从右至左入栈

    • 名称修饰下划线+函数名+@+函数字节数

  • fastcall
    • 函数本身出栈

    • 传参头两个DWORD类型或者占更少字节的参数放入寄存器,其他的从右到左压栈

    • 名称修饰@+函数名+@+参数的字节数

  • pascal
    • 函数本身出栈

    • 传参从左至右入栈

    • 名称修饰复杂

  • naked call
    • 在特殊场合使用,不保护寄存器

  • thiscall
    • C++ 的特殊调用管理,称为thiscall,用于类成员函数的调用,特点随编译器不同而不同

    • VC的thiscall this指针存放于ecx,参数从右至左压栈

    • gcc的thiscall 和cdecl一样,只是将this看做函数的第一个参数