11-27函数

函数

函数的重点是识别调用约定、参数类型和返回值类型

调用约定:

  • cdecl
    • 调用方平栈
  • stdcall
    • 被调用方平栈
  • fastcall
    • 被调用方平栈
    • edx, ecx 寄存器传第1、第2个参数
  • thiscall
    • 参数个数确定:
      • this指针通过ecx传递
      • 被调用方平栈
    • 参数个数不确定:
      • this指针最后一个入栈
      • 调用方平栈

参数个数

通过调用前的push来判断参数个数不一定正确,实际要看函数内部用了多少个参数,如果一个参数都没有用则当作无参函数还原

stdcall也可通过观察ret指令后的平栈大小来判断参数个数

fastcall外面给寄存器赋值、内部未经赋值直接使用

参数类型

根据使用方式来判断

返回值类型

  • __int64
    • 返回值在edx.eax中
  • double, float返回值在st0

你可能感兴趣的:(11-27函数)