汇编与C/C++的混合使用
2011-04-30 18:00
363 查看
基本知识:
C的函数返回值: char,bool从al返回;short int从ax返回;int,指针从eax返回;float double long double从浮点堆栈返回。
C的参数传递: 参数按从右到左的顺序压栈,由调用者平衡堆栈
函数在堆栈中的布局:
【参数列表】
【返回地址】
【ebp】
【局部变量】
如int func(int a,int b,int c)
c
b
a
eip (返回地址)
ebp(mov ebp esp)
locals (局部变量列表)
1. ASM文件调用C模块中的函数,须遵循先声明后使用的原则。
在ASM文件的.code之前声明你从C模块调用的函数。
例如,你要调用C文件中一个名为 int funC(char a,int b,char* c)的函数,
则可这样声明:funC proto,a:byte,b:DWORD,c:ptr DWORD。
2. 在C文件中调用ASM文件中的函数,也须遵循先声明后使用的原则。
将要导出的函数在.code之前修饰为public。(如要导出一个名为func1的函数,则表示为: public func1
例如,Asm中有个函数原型为:func proc [uses esi,edi...],a:dword,b:ptr BYTE,c:ptr DWORD
则可在C文件中这样声明:extern void func(int a,char *b,int *c);
如果在func中有返回值,则根据具体情况声明为 int/char/char*/int*/double/... func(int a,char *b,int* c);
3. 在C++文件中调用ASM模块中的函数 或者在ASM模块调用C++文件中的函数,在声明的时候要将extern扩展为extern "C"
不论是C++文件导出给ASM的函数,还是从ASM导入来的函数,都要声明为
“extern "C" 返回类型 函数名(参数列表)”
的形式
C的函数返回值: char,bool从al返回;short int从ax返回;int,指针从eax返回;float double long double从浮点堆栈返回。
C的参数传递: 参数按从右到左的顺序压栈,由调用者平衡堆栈
函数在堆栈中的布局:
【参数列表】
【返回地址】
【ebp】
【局部变量】
如int func(int a,int b,int c)
c
b
a
eip (返回地址)
ebp(mov ebp esp)
locals (局部变量列表)
1. ASM文件调用C模块中的函数,须遵循先声明后使用的原则。
在ASM文件的.code之前声明你从C模块调用的函数。
例如,你要调用C文件中一个名为 int funC(char a,int b,char* c)的函数,
则可这样声明:funC proto,a:byte,b:DWORD,c:ptr DWORD。
2. 在C文件中调用ASM文件中的函数,也须遵循先声明后使用的原则。
将要导出的函数在.code之前修饰为public。(如要导出一个名为func1的函数,则表示为: public func1
例如,Asm中有个函数原型为:func proc [uses esi,edi...],a:dword,b:ptr BYTE,c:ptr DWORD
则可在C文件中这样声明:extern void func(int a,char *b,int *c);
如果在func中有返回值,则根据具体情况声明为 int/char/char*/int*/double/... func(int a,char *b,int* c);
3. 在C++文件中调用ASM模块中的函数 或者在ASM模块调用C++文件中的函数,在声明的时候要将extern扩展为extern "C"
不论是C++文件导出给ASM的函数,还是从ASM导入来的函数,都要声明为
“extern "C" 返回类型 函数名(参数列表)”
的形式
相关文章推荐
- 混合使用Objective-C,C++和Objective-C++
- 转载一篇将C/C++ 与lua混合使用入门讲的比较好的文章
- arm编程,关于C函数中嵌入汇编和寄存器变量的混合使用方法。用汇编透视c语法操作
- 1. Rccp简明教程(关于R与C++的混合使用方法)
- c/c++ 下使用内嵌汇编(inline assembler) (转自MSDN)
- 使用vs2005创建智能设备的C#和C++混合项目
- C#与C++的混合编程 之二 使用非托管dll 导出标准函数
- C++ 和 汇编 混合编程幼儿园经验总结**持续更新** 学习笔记贴
- Cocos2dx-Lua与C++混合使用
- .net中 CLI/C++中混合类的使用[CAutoNativePtr智能指针]
- 如何混合使用C和C++(上)
- 自动化测试中Python与C/C++的混合使用
- 混合使用Swift,Objective-C, C++, Objective-C++
- 从汇编看c++中默认构造函数的使用分析
- Android NDK混合使用java和C/C++代码--Hello JNI
- c和c++混合使用
- 使用JNI进行混合编程:在C/C++中调用Java代码
- C++和C的源码混合使用需要了解的事
- 从汇编看c++中引用与指针的使用分析
- 从汇编看c++中函数里面的static关键字的使用说明