masm下几种常见函数调用方式

    masm没有fastcall调用方式,其特点为:

1 第一个参数放入ecx,第二个参数放入edx;

2 如果有剩余参数则从右向左压栈;

3 被调用函数清理栈(平衡栈);

4 若有返回值放入eax;

5 name函数实际生成得函数名为@name@4*参数个数

比如有带有2个参数的foo函数则实际名称为:@foo@8


    syscall调用方式:

1 不对函数名做任何修饰;

2 从右向左压栈;

3 被调用函数清理栈;


    stdcall调用方式:

1 name函数名实际生成得函数名称为:_name@4*参数个数;

2 其他与syscall相同;


    C调用方式

1 name函数实际名称为 _name;

2 从右向左压栈;

3 由调用函数清理栈;


    值得注意的是,如果一个函数为 : public syscall foo,其在一个.model为stdcall的文件中,则此代码无法ml成功。一个解决方法是将所有syscall函数放在一个单独的.model为syscall的文件中,比如foo函数,然后在.model为stdcall的主文件中引用foo:

foo proto syscall :DWORD,:DWORD

最后用link将2个obj链接即可。

你可能感兴趣的:(masm,stdcall,syscall,函数调用方式,ccall)