• VS搭建32位和64位汇编开发环境



    本文属于《 X86架构指令基础系列教程》之一,欢迎查看其它文章。

    1 VS2017软件安装

    安装过程,请参考《Visual Studio Community 2017安装步骤(只装C++)》

    2 创建汇编工程

    点击“文件”->“新建”->“项目”,弹出如下图:
    在这里插入图片描述
    选择“Visual C++”->“空项目”,输入项目名称和路径,确定,项目就建立好了。
    然后选中项目,右键->“生成依赖项”->“生成自定义”,如下图所示:
    在这里插入图片描述
    弹出如下图所示:
    在这里插入图片描述
    勾选“masm”,确定。然后,在项目的“源文件”文件夹下,右键->“添加”->“新建项”,如下图所示:
    在这里插入图片描述
    弹出的“添加新项”窗口中,选择“C++文件”,然后修改文件后缀名为“.asm”,最后点击“添加”。
    在这里插入图片描述
    到此,我们建立了工程,并在工程中添加了一个汇编文件。
    无论是编写32位还是64位汇编,以上的步骤都是一样的。

    3 配置X86汇编环境(32位)

    创建工程后,“解决方案平台”默认选项为“x86”,如果不是,需要手动修改。
    我们在test.asm中,输入两数求和的汇编例子,代码如下:

    .486							;CPU 型号
    .MODEL FLAT, STDCALL
    ExitProcess PROTO,dwExitCode:DWORD
    
    .DATA
    	SUM DB ?				
    	.CODE
    
    	MAIN PROC					;开辟主线程
    		MOV AL, 11H				;立即数 11H 放入寄存器 AL			
    		ADD AL, 22H				;立即数 11H 与寄存器 AL 内的数据相加,在 AL 中寄存						
    		MOV SUM, AL				;把 AL 寄存器中的数据 给 SUM
    		INVOKE ExitProcess,0	;返回DOC
    	MAIN ENDP
    
    END MAIN
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    MOV AL, 11H位置,按F9,打下断点,然后F5启动调试,如下所示:
    在这里插入图片描述
    表明32位程序已经运行成功。

    4 配置X64汇编环境(64位)

    将“解决方案平台”默认选项为“x64”,此时如果我们直接运行上述的汇编例子,编译会报错,可能是X86和X64汇编语法支持上有区别,因此我们换个例子。
    在test.asm中,输入代码如下:

    ;64位汇编程序模板 (Template)
    ;声明一个ExitProcess函数
    ExitProcess PROTO
    
    .data
    	;在这里声明变量
    
    .code 
    main PROC
    	;这里写自己的代码
    	
    	mov rcx,0
    	call ExitProcess
    main ENDP
    END
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    选中项目,右键->“属性”,弹出如下所示:
    在这里插入图片描述
    依次选择“配置属性”->“链接器”->“高级”->“入口点”,修改为自己代码中的main过程,最后“应用”->“确定”。
    如果不修改入口点,编译时会报错“无法解析的外部符号 mainCRTStartup”。

    mov rcx,0位置,按F9,打下断点,然后F5启动调试,如下所示:
    在这里插入图片描述
    表明64位程序已经运行成功。

    5 调试技巧

    在这里插入图片描述
    在菜单中,“调试”->“窗口”->“内存”/“反汇编”/“寄存器”菜单项,可以在调试时,打开对应的窗口。
    在这里插入图片描述

  • 相关阅读:
    Java面试大厂名企高频真题--Spring MVC 执行流程
    CASE2023
    TabLayout+Fragment+ViewPager实现Tab页面效果
    超越Devin!姚班带队,他们创大模型编程新世界纪录
    微信小程序消息订阅Java
    扬帆起航:CCF开源发展论坛在深举办
    【Android中RecyclerView刷新导致源数据被刷新】
    通过docker部署jenkins
    137. 只出现一次的数字 II
    Mac电脑专业的任务管理软件 Omnifocus Pro 3中文 for mac
  • 原文地址:https://blog.csdn.net/u011832525/article/details/134063519