当前位置: 首页 > news >正文

VS2022配置x86/x64调用32位和64位汇编语言动态库环境

本篇记录VS2022调用32位和64位汇编语言动态库的环境配置。

1.VS2022配置X86汇编语言调用32位动态库。

1.打开VS2022,创建新项目,选择Window桌面向导,下一步。

2.填写项目名称,设置项目位置,点击【创建】按钮

 3.设置桌面项目为空项目,然后点周【确定】按钮

4.空项目创建成功

5.把整个动态库文件夹Irvine复制到C盘根目录:

6.配置汇编语言环境,右键项目名====》生成依赖项====》生成自定义

7.钩选masm选项,然后【确定】

8.点击Debug右边的平台下拉菜单,==》选择配置管理器

 9.平台配置,点击下拉菜单的编辑,选择编辑

10.把x64平台移除,然后点【关闭】按钮

活动解决方案的平台也一样,把x64平台删除

11.新建一个汇编语言源文件,右键===》添加===》新建项

选择c++文件,输入完整的源文件名call32lib.asm

12.输入以下源代码进行编译

; call32lib.asmINCLUDE Irvine32.inc
.data.code
main PROCcall	Crlfcall	WaitMsg			; "Press any key..."main ENDP
END main

13.编译报错,提示不能打 Irvine32.inc文件,即是没有找到这个文件,

14.右键项目==》属性 进行配置:

链接器==》常规==》附加库目录,输入库路径

链接器==》输入==》附加依赖项,输入依赖库名称

链接器==》高级==》随机基址,选【否】

Microsoft Macro Assembly ==》General==》Include Paths输入库路径,然后确定

15.再次编译,成功,输入文字

======================================================

2.VS2022配置X64汇编语言调用64位动态库。

1.打开VS2022,创建新项目,选择Window桌面向导,下一步。

2.填写项目名称,设置项目位置,点击【创建】按钮

 3.设置桌面项目为空项目,然后点周【确定】按钮

4.空项目创建成功

5.配置汇编语言环境,右键项目名====》生成依赖项====》生成自定义

6.钩选masm选项,然后【确定】

7.点击Debug右边的平台下拉菜单,==》选择配置管理器

 8.平台配置,点击下拉菜单的编辑,选择编辑

9.把Win32平台移除,然后点【关闭】按钮

10活动解决方案的平台也一样,把x64平台删除

11.新建一个汇编语言源文件,右键===》添加===》新建项

选择c++文件,输入完整的源文件名call64lib.asm

12.输入以下源代码进行编译

; call64lib.asmExitProcess PROTO
WriteInt64  PROTO
Crlf        PROTO
Random64	PROTO
RandomRange PROTO
Randomize   PROTO.code
main procsub   rsp,8				; align the stack pointersub   rsp,20h			; reserve 32 bytes for shadow parameterscall  Randomizemov   rcx,20
L1:mov   rax,234324243242call  RandomRange			; returns RAX = random value	call  WriteInt64call  Crlfloop  L1add  rsp,28h			; restore stack pointer (optional)mov  ecx,0call ExitProcess
main endpend

13.编译报错,提示不能打 Irvine32.inc文件,即是没有找到这个文件,

14.Irvine64.obj文件放到工程 目录下:

15.右键项目==》【添加】===》【现有项】

16.把Irvine64.obj文件添加到项目中

17.编译调试,出错

18.没有找到main入口点,右键项目==》属性==》链接器==》高级==》入口点,输入main

19.编译,运行调试

链接器==》系统==》启用大地址,选【否】

20.设置完成后,再次编译运行调试:

调用成功,显示随机数字

相关文章:

  • 【C/C++】C++26新特性前瞻:全面解析未来编程
  • 【k近邻】 K-Nearest Neighbors算法原理及流程
  • 双指针技巧深度解析
  • 新一代python的包管理软件mamba
  • 详解HashMap底层原理
  • JDBC 工具类:1.0到3.0版本
  • 【大模型水印论文阅读2】前缀文本编码、均匀性约束
  • Java--数组
  • 基于springboot的火锅店点餐系统
  • OpenCV图像添加水印
  • RocketMQ 消息长轮询
  • Day44 预训练模型
  • Python实例题:文件内容搜索工具
  • 探秘AI的秘密:leaked-system-prompts
  • 视图、索引介绍
  • Java底层原理:深入理解JVM内存模型与线程安全
  • 从零开始的二三维CAD|CAE轻量级软件开发:学习以及研发,Gmsh的脚本编辑器设计!
  • 微软全新开源的Agentic Web网络项目:NLWeb详解
  • 性能测试常见指标与瓶颈分析方法
  • [Ethernet in CANoe]1--SOME/IP arxml文件格式的区别