Visual Studio 2022 MASM x64汇编hello world以及调试(Console版 + Windows版)

这篇具有很好参考价值的文章主要介绍了Visual Studio 2022 MASM x64汇编hello world以及调试(Console版 + Windows版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文介绍使用Visual Studio 2022的MASM开发x64汇编程序hello world的环境配置和汇编代码,作为学习CPU指令的起点。分两个版本的hello world, 一个是console版本,另一个是windows版本。

第1步: 安装

首先安装visual studio community 2022,下载地址 https://visualstudio.microsoft.com/,安装时选择C++开发模块

第2步:新建项目,配置项目

安装好以后新建项目,项目类型选择C++  console  empty project

创建好项目以后右击项目,点击生成依赖项,生成自定义,勾选masm,确定

第3步:Windows版的hello world

接下来添加汇编源文件,在项目的源文件上右击添加新项目,选择C++文件,但是文件名使用.asm扩展名

然后在asm文件中填入代码:

extrn MessageBoxA: proc

;64位没有 .model 宏指令,不能指定内存模型和调用约定

.data
text db 'Hello World', 0
caption db 'Selph First x64 Application', 0

.code
WinMain proc
sub rsp,28h ; 函数调用前需要预留影子空间,对齐rsp
xor r9d,r9d
lea r8, caption
lea rdx, text
xor rcx,rcx
call MessageBoxA ; 函数调用使用fastcall
add rsp,28h
WinMain ENDP
END ; 最后直接end,不用指明符号

设置项目的类型为windows:右击项目,属性,链接器,系统,在子系统里选择窗口(/subsystem:windows)

并在链接器,高级里设置入口为WinMain

然后编译生成项目,生成前确保工具栏显示的是 debug - x64,运行生成出来的exe文件会看到弹出hello world 窗口。

第4步:Console版的hello world

接下来我们看一下console版的Hello world

将asm文件的内容改为:

EXTERN GetStdHandle : PROC
EXTERN WriteFile : PROC
EXTERN ExitProcess : PROC

.DATA?
hFile QWORD ?
BytesWritten DWORD ?

.DATA
hello BYTE 'Hello world!', 13, 10

.CODE
main PROC
; https://blogs.msdn.microsoft.com/oldnewthing/20160623-00/?p=93735
sub rsp, 40 ; Shadow space (4 * 8) & 1 parameter (8 bytes)
; https://docs.microsoft.com/en-us/cpp/build/stack-allocation
and spl, -16 ; Align to 16

; https://msdn.microsoft.com/library/windows/desktop/ms683231.aspx
mov ecx, -11 ; DWORD nStdHandle = STD_OUTPUT_HANDLE
call GetStdHandle ; Call WinApi
mov hFile, rax ; Save returned handle

; https://msdn.microsoft.com/library/windows/desktop/aa365747.aspx
mov rcx, hFile ; HANDLE hFile (here: Stdout)
lea rdx, hello ; LPCVOID lpBuffer
lea r9, BytesWritten ; LPDWORD lpNumberOfBytesWritten
mov r8d, LENGTHOF hello ; DWORD nNumberOfBytesToWrite
mov qword ptr [rsp+32], 0 ; LPOVERLAPPED lpOverlapped = NULL
call WriteFile ; Call WinAPI

exit:
; https://msdn.microsoft.com/library/windows/desktop/ms682658.aspx
xor ecx, ecx ; Set RCX to null for return value
call ExitProcess ; Call WinAPI to exit
main ENDP

END

在项目,属性,链接器,系统,在子系统里选择控制台(/subsystem:console)

在链接器,高级里设置入口为main

右击项目,调试,调试前确保工具栏显示的是 debug - x64,会看到在控制台输出hello world

第5步:调试汇编程序

当我们在汇编代码中设置一个断点,然后开始调试,在这个断点停下时,visual studio的调试菜单的窗口里会多出一些选项,比如寄存器、反汇编、内存,点击寄存器,会显示出寄存器的值,点击反汇编,会在源代码中显示相应的机器码,点击内存能看到内存的内容,这些信息将帮助我们方便地调试。

参考资料

在win10 64位系统上使用visual studio2019创建汇编asm程序工程_enderwsp的博客-CSDN

https://blog.csdn.net/Ender__/article/details/93884634

使用 Visual Studio 2017 写纯 64 位汇编(intel 风格)_〇VEA的博客-CSDN博客_x64汇编书籍

https://blog.csdn.net/Alisebeast/article/details/79875620

使用VS2022编写x64汇编程序 - 我可是会飞的啊 (kn0sky.com)

https://www.kn0sky.com/?p=112

https://stackoverflow.com/questions/52796300/assembly-programming-winasm-vs-visual-studio-2017文章来源地址https://www.toymoban.com/news/detail-447403.html

到了这里,关于Visual Studio 2022 MASM x64汇编hello world以及调试(Console版 + Windows版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python程序员Visual Studio Code指南2 Hello World

    Visual Studio Code的Python 扩展提供了对Python语言的支持,包括语法着色、代码补全、过滤、调试、代码导航和代码格式化等功能,以及Jupyter Notebook支持等Python特有的功能。您可以在Visual Studio Code的扩展视图中安装Python扩展。与从扩展市场安装的任何扩展一样,你可以在设置编辑

    2024年02月12日
    浏览(32)
  • MASM 64汇编

    微软宏编译器 MASM 有32位版本(ml)以及64版本(ml64)。 其中相关路径如下: “C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.33.31629binHostx86x64ml64.exe” 当然你可以用VS自带的命令行工具打开使用: 这里给出一个Demo程序 相关编译命令 Tip:64程序不支持内联汇编 Modern x6

    2024年02月12日
    浏览(62)
  • 在Visual Studio 中,Release、Debug、x86和x64 四个不同的概念

    在 Visual Studio 中,Release、Debug、x86和x64 是四个不同的概念。 Release 和 Debug 是编译的不同配置,用于控制编译器生成的代码和符号信息的方式。 - Release 配置用于生成最终发布版本的代码。在 Release 模式下,编译器会进行各种优化,以提高程序的性能和执行效率。此外,Relea

    2024年02月17日
    浏览(36)
  • This application requires Visual Studio 2019 X64Redistributable Please install the Redistributable 。

    一些新的电脑在安装mysql的时候会出现这个报错 Latest supported Visual C++ Redistributable downloads | Microsoft Learn  那就在这个地址中下载

    2024年02月05日
    浏览(49)
  • Visual Studio 2022 报错 LNK1104 无法打开文件“opencv_world310.lib”

    “link.exe”已退出,代码为 1104。 LNK1104 无法打开文件“opencv_world310.lib” 右键项目——属性—— 附加依赖项——编辑——取消勾选“从父级或项目默认设置继承”——确认,重新运行程序即可 运行结果 可能是以前电脑上安装过旧版本的visual studio,老版本文件与新版的vs不兼

    2024年02月16日
    浏览(43)
  • 使用 GNU 汇编语法编写 Hello World 程序的三种方法

    本篇我们使用汇编来写一个经典的  Hello world  程序。 运行环境: OS:Ubuntu 18.04.5 LTS x86-64 gcc:version 4.8.5 在用户空间编写汇编程序输出字符串,有三种方法: 调用C库函数  printf 使用软中断  int 0x80 使用  syscall 系统调用 下面对三种方法,分别进行说明。 为了更好的理解汇

    2024年02月06日
    浏览(49)
  • 安装visual studio2022以及配置opencv

    目录 1下载visual studio 1.1进入网站点击 下载visual studio,选择Community 2022 1.2打开安装包,进入界面 1.3等待安装完成  2下载opencv 2.2下载完成后自定义解压路径 3.3win10系统配置环境变量 3配置visual studio 3.1打开软件 3.2配置 4测试 Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编

    2024年02月12日
    浏览(58)
  • 4.10 x64dbg 反汇编功能的封装

    LyScript 插件提供的反汇编系列函数虽然能够实现基本的反汇编功能,但在实际使用中,可能会遇到一些更为复杂的需求,此时就需要根据自身需要进行二次开发,以实现更加高级的功能。本章将继续深入探索反汇编功能,并将介绍如何实现反汇编代码的检索、获取上下一条代

    2024年02月13日
    浏览(38)
  • C++64位游戏软件安全汇编与反汇编反调试 x64驱动开发进程保护进程隐藏驱动读写过保护 视频教程

    ├─课程1 x32dbgx64dbg驱动调试器反反调试器驱动调试环境搭载 │ 1.为什么要搭载驱动调试环境.mp4 │ 2.驱动调试环境搭载1.mp4 │ 3.三种过PG的方法.mp4 │ 4.驱动调试环境搭载2.mp4 │ 5.驱动调试与驱动进程保护对抗.mp4 │ ├─课程2 C++64位游戏软件安全汇编与反汇编反调试2021年新

    2024年02月02日
    浏览(34)
  • Visual C++ 使用x64编译器

    使用cmake编译mysql connector c++的时候,输出信息发现一个问题。 C:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.16.27023bin目录下居然有两个目录 Hostx86 Hostx64 这两个目录下都有x86和x64两个子目录。此时就糊涂了,为啥有Hostx64和Hostx86呢,还比较一下,发现这两个目

    2024年02月07日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包