VC连接 调用MASM32编译的obj文件
来源:互联网 发布:仙侠游戏哪个好玩知乎 编辑:程序博客网 时间:2024/06/05 00:16
VC连接调用MASM32编译的obj文件
汇编例子:
.386
.modelflat, stdcall
optioncasemap :none ; case sensitive
.code
_add proc inta,intb
;pushebp
;movebp,esp
moveax,[ebp+8]
movebx,[ebp+12]
addeax,ebx
ret
_add endp
end
说明:不需要 push ebp,mov ebp,esp这两句,vc编译连接时会自动添加
ret指令不需要弹出参数,调用者会清理堆栈
_add函数要在最后写入end伪指令,结束该asm模块,使之能够单独编译。end指令在程序项目中是用于指定入口点的,该库文件不能指定入口点,因为这不是主程序,所以直接写end即可.
编译指令:ml /c /coff add.asm(这里假设文件名为add.asm)
vc部分:新建一个简单的控制台hello world例子
#include "stdafx.h"
extern "C" int __stdcall _add(int,int);
int main(int argc, char* argv[])
{
int a;
printf("HelloWorld!\n");
a=_add(1,2);
printf("ssss%d",a);
return 0;
}
说明:被调用的函数声明必须加上extern"C",这里的C告诉编译器这个外部函数的修饰名使用C语言的修饰规则而不是C++语言,
__stdcall
这里前面是两个下滑划线,这是C++语言中指定函数调用规则的关键字,这里使用stdcall调用规则,因为原来的汇编代码中的指令.model flat,stdcall,指定了函数的调用规则,所以这里要一致,否则就会出现堆栈错误。程序就挂了。。。
vc6编译选项设置:Project->Settings->link->Object/Library modules:下面的框框后面追加汇编编译的obj文件名:add.obj如果是放在vc工程目录的debug文件夹里要带上路径debug\add.obj,
或者把obj拷入debug文件夹,然后在文件头部加入一句:
#pragma comment(lib,"debug\YourObjName.obj ")
编译连接,OK,如果程序出现错误,要用ollydbg或其他工具查看_add函数调用前后堆栈是否平衡。
(完)
- VC连接 调用MASM32编译的obj文件
- masm32 9.0 编译、连接问题
- C语言编译产生的.OBJ文件和汇编编译产生的.OBJ文件,如何连接_百度知道
- OBJ文件中面的连接
- java调用VC编译而成的dll文件
- gcc [patch i386]: Enable ms_abi/sysv_abi and add testcases(linux平台 调试、调用windows编译的obj文件)
- VC与Matlab混合编程(在VC中调用.m文件编译生成的DLL)
- 编译不能生成obj文件
- 如何编译预置obj 文件?
- vc编译小的文件
- VC的一些编译连接选项
- VC的一些编译连接选项
- java调用vc编译的dll
- vc 的静态连接库调用
- vc 的静态连接库调用
- MASM32 编译链接
- masm32编译批处理编写
- Matlab与c++混合编程[四.通过VC调用Matlab编译产生的dll文件]
- CI入门 : 一些建议和最佳实践
- 忙里偷闲-封装汇编编写的水波特效供C++调用
- OOP中__SET() __GET() __ISSET() __UNSET()四个方法的应用
- 隐藏了网站的入口文件INDEX.PHP
- APACHE和NGINX下面如何做301重定向。
- VC连接 调用MASM32编译的obj文件
- 深入浅出ObjC之消息
- 用 C 语言编写 Windows 服务程序的五个步骤
- 偶得一文,吾望为之
- 【转】突破sql 注入过滤Union+SELECT 继续射下去
- tomcat 6 发布应用后,访问jsp报错org.apache.jasper.JasperException: java.lang.NullPointerException的解决办法。
- 乔,你终于开博了
- 界面布局控件-WeifenLuo.WinFormsUI.Docking
- XMPP协议rfc6121详解(1)-联系人管理