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
设置为Console
或Windows
编写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!!!
PS:汇编这种东西,一万年都没人弄一次,网上有的资料少得可怜。帮大家踩踩坑,希望对大家有帮助~~~
- VS2017编写汇编并调用c库函数(msvcrt.lib)
- 汇编调用C库函数
- 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
- 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
- AT&T 汇编调用C库函数
- 在汇编中调用C库函数
- 用汇编实现C库函数的调用
- VS2017中实现C程序调用汇编函数
- 在vs2017中编写汇编
- VS2017——C语言dll编译并调用
- linux平台学x86汇编(十六):在汇编语言中调用C库函数
- 不调用c++/c的memcpy库函数,请编写memcpy。
- c库函数编写练习
- .调用标准C库函数
- c调用汇编(2)
- 【转载】C Runtime Library(MSVCRT)来历
- C Runtime Library(MSVCRT)来历 .
- C Runtime Library(MSVCRT)来历
- Fabric源码分析之invoke执行流程及block生成分析
- 136. Single Number
- MySQL的if,case语句使用总结
- Java类加载的过程
- 深度优先搜索:杭电1045
- VS2017编写汇编并调用c库函数(msvcrt.lib)
- 海量数据处理十个方法大总结
- poj2074 Line of Sight【计算几何】
- 多线程及线程池
- 引用类型-Array-创建
- Fibonacci again and again (SG值运用)
- Blog21@linux介绍Apahe
- 树上最长上升子序列
- leetCode-Degree of an Array