VS2017编写汇编并调用c库函数(msvcrt.lib)
前言
本文参考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 4096
ExitProcess proto,dwExitCode:dword
.code
main procmov eax,5 add eax,6 invoke ExitProcess,0
main endp
end 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, stdcall
option casemap:none
; 说明程序中用到的库、函数原型和常量
includelib msvcrt.lib
printf PROTO C :ptr sbyte, :VARARG
; 数据区
.data
szMsg byte "Hello World! ", 0ah, 0
; 代码区
.code
start:invoke printf, offset szMsgret
end start
Helloword!!!
最后推荐一个VS里的汇编高亮插件asmhighlighter
PS:汇编这种东西,一万年都没人弄一次,网上有的资料少得可怜。帮大家踩踩坑,希望对大家有帮助~~~
VS2017编写汇编并调用c库函数(msvcrt.lib)相关推荐
- Qt实用技巧:VS2017编写纯C库以及使用Qt调用C库方法
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- vs 2019编写汇编并运行调试
前言 我是上学期学的汇编,因为有vs又不想用课上教的麻烦的dosbox以及masm32,但是一直没找到高亮插件和能调试的(难在运行不了而找不到答案上,出现的错误在最后放出,还请先达们不吝指点)汇编代码 ...
- 如何通过JNI在Java中调用C库函数
使用Java语言进行开发时,可能由于处理速度.硬件控制或者复用既有的C/C++模块等方面的原因,需要Java层与使用C/C++编写的应用.模块或库进行交互,共同完成某些任务.在两者之间充当连接桥梁作用 ...
- 汇编代码调用main和分配内存
C语言的main函数 int main() {unsigned int *pgpofcon = 0x56000050;unsigned int *pgpofdat = 0x56000054;*pgpo ...
- 在matlab如何调用库函数,Matlab调用外部库函数方法和注意事项
在MATLAB环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中.一旦加载成功,就 能直接在MATLAB中直接请求关于函数的任何信息.而当不再需要该库时,就应当及时把库文件从内存 中卸载以 ...
- python 无法引用 tensorflow.keras_解决TensorFlow调用Keras库函数存在的问题
tensorflow在1.4版本引入了keras,封装成库.现想将keras版本的GRU代码移植到TensorFlow中,看到TensorFlow中有Keras库,大喜,故将神经网络定义部分使用Ker ...
- 汇编语言-008(条件跳转应用 、loopnz 条件循环指令使用 、loopz 条件循环指令使用 、 if语句编写汇编时 、while语句编写汇编时 、循环内的if语句嵌套)
1: 条件跳转应用,三个数中最小数 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data V1 WOR ...
- Linux X64下汇编学习:C语言调用汇编代码,汇编中调用C语言函数
Table of Contents hello world hello.asm makefile float circle_fpu_87c.c circle_fpu_87.asm makefile s ...
- 人生苦短,使用百度云SDK,编写python代码调用接口的车牌识别
两个想法 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 自己实现车牌识别算法(复杂) 一开始准备使用百度云文字识别C++ SDK来做,发现需 ...
最新文章
- Codeforces 955C Sad powers(数论)
- CodeForces - 556A Case of the Zeros and Ones
- c语言命令行选项处理函数getopt和getopt_long() 函数使用
- iptables 生效_Linux防火墙Firewall和Iptables的使用
- html制作水晶状态导航栏,HTML5 CSS3水晶风格的页面头部
- Bootstrap学习3
- 震惊!微软小冰公众号被封?示好国内,苹果拟推出特色版iPhone;谷歌更新Google Play支持名单:华为荣耀多款在列……...
- Java GUI简单点名器
- oracle用中文linux,linux+oracle中文乱码
- 《中国人工智能学会通讯》——9.6 哈希学习
- CMSIS-RTOS 时间管理之虚拟定时器Virtual Timers
- CMD命令查看IP地址
- itools苹果录屏大师_超级录屏大师苹果版下载-超级录屏大师APP
- laravel项目出现Non-static method Redis::hGet() cannot be called statically的解决方法
- 有运气摇号来不及挑选?网易有数帮你科学选房
- 数字信号时序电路_数字电子中的时序电路
- 云原生之Kubernetes:18、详解准入控制器
- 电脑一键U盘启动快捷键
- 网络字节码、本地字节码(大端,小端)
- 18位身份证号藏了什么玄机?用js教你校验身份证
热门文章
- Python生成requirement.txt文件
- 计算机如何远程控制对方手机,如何远程控制别人的电脑【图解】
- 正睿OIday1总结
- MPI中的Bcast, Reduce和Gather使用举例
- java代码如何整合_Java如何合并两个PPT文档?
- qt中的toUtf8, toLatin1, Local8bit编码问题
- Android之打开APP部分页面(Activity)的一瞬间手机状态栏会变成蓝色解决办法
- 使用网络图展示Venn图集合及Cytoscape操作视频
- HDU6069	Counting Divisors
- 两部苹果手机同步照片_苹果手机误删照片怎么恢复?