VS2017编写汇编并调用c库函数(msvcrt.lib)

来源:互联网 发布:单位网络监控 编辑:程序博客网 时间:2024/06/06 10:40

前言

本文参考http://blog.csdn.net/sinat_27382047/article/details/70339455以及峰神的网站~~~~~~膜一发​ 本文提供了在Visual Studio 2017中利用masm依赖,在c++项目中编写、编译、运行汇编语言的方法。本文兼容Visual Studio 2012及以上版本。

新建空编项目

在2017最新版里,新建控制台应用程序里没有新建空项目选项了。改到了windows桌面导向,选择空项目,去掉安全检查



为项目添加masm依赖

在项目资源管理器中右键项目,点击生成依赖项,勾选 masm



设置subsystem

右键项目-属性,在属性面板中展开链接器-高级,将subsystem设置为ConsoleWindows

编写asm代码

源文件文件夹上右键添加-新项目,将.cpp文件重命名为.asm文件,并填入测试代码。


; AddTwo.asm - adds two 32-bit integers..386.model flat,stdcall.stack 4096ExitProcess proto,dwExitCode:dword.codemain proc    mov eax,5                   add eax,6                   invoke ExitProcess,0main endpend main

到此就可以在VS里调试汇编代码了。不过输入输出全靠bios 21h中断才能。low的不要要不要的。接下来我们尝试在汇编中调用一些c的函数。原理很简单啊,代码功能的实现其实都是由一些动态链接库完成的,我们在汇编中用c的方式调用这些动态链接库就好啦。
对于scanf printf需要用到masm中的msvcrt.lib。下载一个masm(随便哪个版本的masm都可以,只要你电脑系统兼容就好。如果怕麻烦,我把需要的两个库提取出来了,点这里下载)
在masm的安装目录中找到include文件夹和lib文件夹

在VS项目中配置
在这里添加你的masm的include文件夹



记得结尾加分号!!!

配置lib
链接器-通用-附加库目录
在这里添加你的masm的lib文件夹


测试代码

;PROG0409,文件名为hello.asm.386.model flat, stdcalloption casemap:none; 说明程序中用到的库、函数原型和常量includelib      msvcrt.libprintf          PROTO C :ptr sbyte, :VARARG; 数据区.dataszMsg           byte    "Hello World! ", 0ah, 0; 代码区.codestart:                invoke  printf, offset szMsg                retend             start


Helloword!!!


最后推荐一个VS里的汇编高亮插件asmhighlighter


PS:汇编这种东西,一万年都没人弄一次,网上有的资料少得可怜。帮大家踩踩坑,希望对大家有帮助~~~