参考教程:

作者:上下求索

VS2015,C嵌套汇编 & C,汇编相互调用

http://ylqhust.github.io/blog/2016/04/17/vs-clanguage-asm-combine/

最近因为工作需要开始学习x86汇编,目的是使用c++调用汇编编写的代码,在网上找到的资料要么不对,要么是纯汇编编写的程序。这里分享一个很不错的在VS2015中调用x86汇编的地址,方便学习使用。

在实际实践中,发现该教程的有些地方并不能正常运行,需要根据实际情况稍微变动。

1、在新建控制台空项目后,添加.asm文件,并完善汇编,教程中提到是需要在命令行中先使用 ml /c /coff sum.asm 指令生成对应的汇编obj文件,然后把该文件添加到项目中,我出现的情况是,如果把obj文件加入到项目中,在编译阶段会报如下错误:

sum.obj : error LNK2005: _sumab already defined in sum.obj

出现这种情况的原因就在于项目中同时存在sum.asm和sum.obj,意思就是说编译器会自动编译汇编源代码,无需手动编译,所以上面那一步操作实际可以略去。

2、第二个问题是在汇编子程序中调用c代码。

教程给出的c代码如下:

extern int __stdcall sum3(int a, int b) {//此函数给汇编子程序调用return a + b;
}

同样在编译阶段会出现如下错误信息:

asmfile.obj : error LNK2019: unresolved external symbol _sum3@8 referenced in function _sum

需要对c代码做如下修改

extern "C" {int __stdcall sum3(int a, int b) {//此函数给汇编子程序调用return a + b;
}
}

这样,便可以顺利通过编译,进而运行项目文件。

转载于:https://www.cnblogs.com/buaawang/p/9824900.html

在VS2015中编写x86汇编相关推荐

  1. VS2010中编写x64汇编的具体方法

    编写涉及系统特性的一些底层程序,特别是ShellCode,不可避免地要采用直接编写汇编代码的方式. 在目标平台为x86模式时,可以直接使用内联汇编,这个很多人都比较熟悉了,也非常地方便. 但是当目标平 ...

  2. 【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 )

    文章目录 一.使用 IDA 打开动态库文件 二.IDA 中查找指定的方法 一.使用 IDA 打开动态库文件 分析 Android SDK 中的 x86 架构的动态库 , 动态库位置 : D:\001_ ...

  3. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  4. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  5. 【Android 逆向】x86 汇编 ( 参考资料 | Intel 官方的文档 | x86 汇编中文文档 | 汇编指令查询器 )

    文章目录 一.x86 汇编参考文档 1.Intel 官方的文档 2.常用 x86 汇编文档 3.x86 汇编指令查询器 总结 一.x86 汇编参考文档 下面的所有资料 , 都可以在博客资源 https ...

  6. X86汇编中的结构体STRUCT和UNION

    X86汇编中的结构体STRUCT和UNION 结构的定义 ; 定义名为Person的结构体 Person STRUCTidNum byte "000000"lastName byt ...

  7. VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

    为什么80%的码农都做不了架构师?>>>    x64: TITLE Add and Subtract (AddSub.asm) ; This program adds and su ...

  8. X86汇编常见的寄存器

    X86汇编常见的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和GS) ...

  9. X86汇编学习小结----cmp 完整版本

    生成汇编代码 比如,一个简单的函数: // hello.c void func(){} 如何得到相应的汇编代码呢? gcc -S hello.c hello.s clang -S hello.c he ...

最新文章

  1. “决胜算力时代 ”AI算力高端闭门分享会(7月21日)
  2. 单片机编程之联合体(union)的妙用
  3. PowerShell2.0之维护网络(一)查看网络设置
  4. Docker 容器从入门到Devops实践
  5. Kubernetes共享使用Ceph存储
  6. 既生瑜何生亮 access_token VS refresh_token
  7. 任正非:再见,荣耀!从此以后便是对手!
  8. return to dl_resolve无需leak内存实现利用
  9. AcWing 1987. 粉刷栅栏(离散化+差分)
  10. Android View框架总结(二)View焦点
  11. PR软件怎么去视频噪声
  12. 浅谈项目管理结构化思维
  13. 【土壤分类】基于支持向量机实现土壤分类附matlab代码
  14. 使用linux宝塔面板安装 魔方IDC管理系统 免费
  15. MySQL优化那些事
  16. 高等代数 :2 行列式
  17. [OHIF-Viewers]医疗数字阅片-医学影像-es6解构赋值-const{}=-let{}=
  18. 天津计算机专业专科大学排名,天津的计算机专业大学排名
  19. DataBinding详解
  20. 顺丰和菜鸟互撕 专家:核心是大数据

热门文章

  1. WebGIS在行业中应用的演变
  2. Navicat 9如何连接ORACLE10G数据库
  3. [转]DotNet for Symbian平台 (Nokia,Sony,Motorola等手机)
  4. 给ADAS泼冷水?不,是客观评价
  5. typeScript面试必备之-通识七:typeScript中的可索引接口(数组,对象)+类类型接口...
  6. 在Linux安装配置Tomcat 并部署web应用 ( 三种方式 )
  7. 20.三层技术之OSPF区域划分与路由重分发(2)
  8. libjpeg编译使用详解
  9. Titanium Developer
  10. 潘越云《面朝海子》:诗里的人都会终成眷属