1、堆栈方式

  1)将函数的参数依次(C/stdcall规范是从右往左,PASCAL是从左往右 压入堆栈

  2)子程序使用"ebp+偏移量"对堆栈中的参数进行操作

  3)子程序使用ret/ret 8(2个参数占8个字节)等进行返回

2、寄存器方式

  A.没有统一标准,不过大多数编译器遵循_fastcall规范

  1)VC++编译器将最左边的2个不大于4个字节的参数放在ecx和edx,其它参数依次从右至左(C方式)放入堆栈

  2)Borland Delphi/C++编译器将最左边的3个不大于4个字节的参数分别放在eax,edx,ecx,其它参数依次从左至右(PASCAL方式)压入堆栈

  3)Watcom C

  B.thiscall通过寄存器传递参数(thiscall为C++中的非静态类成员函数的默认调用约定,对象的每个函数隐含接收this参数,采用这种约定,函数参数按照从右到左的顺序入栈,通过ecx传送this指针)

3、全局变量(传递隐含参数)

posted on 2019-12-25 12:13  mktest123  阅读(642)  评论(0)    收藏  举报