masm下几种常见函数调用方式
2014-07-03 19:43
288 查看
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链接即可。
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下几种常见函数调用方式
- masm下几种常见函数调用方式
- 几种函数调用方式
- 几种函数调用方式
- android中一种不常见的函数调用方式
- 函数声明的几种方式,函数声明与函数表达式的区别,函数调用的几种方式
- js中常见的几种调用ajax的方式
- C/C++中几种函数调用方式的比较
- 函数有几种调用方式?
- 几种函数调用方式
- 几种函数调用方式
- 几种函数调用方式
- C语言中几种常见的内存操作函数(非调用)
- 几种函数调用方式
- js中常见的几种调用ajax的方式
- 几种函数调用方式
- 几种函数调用方式转自 baidu baike
- java调用dll文件的几种常见方式
- 函数调用的几种方法 几种主流框架使用匿名函数模仿块级作用域的方式
- php 函数调用的几种方式