Windows中文网

 找回密码
 立即注册
搜索
查看: 10669|回复: 0

通过VS编写64位汇编程序(Hello World)

[复制链接]

19

主题

22

帖子

428

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
428
发表于 2021-10-10 10:08:42 | 显示全部楼层 |阅读模式

VS功能强大,可以作为一个简单的汇编语言IDE来使用,为了使汇编代码支持高亮显示,首先建议安装一个AsmDude插件,如果之前已经安装过其他VS插件(例如Visual Assist),VS中应该有一个“扩展(X)”主菜单项,点击“扩展(X) ”菜单项 → 管理扩展,打开“管理扩展”对话框,选择“联机”,在搜索框中输入“AsmDude”,然后进行安装即可。

现在,通过VS编写64位汇编程序Hello World。创建一个空项目HelloWorld,打开VS → 创建新项目(N) → 选择“Windows桌面向导”,点击“下一步”按钮 → 项目名称输入“HelloWorld”,选择一个保存位置,点击“创建”按钮 → 选择应用程序类型为“桌面应用程序(.exe)”,勾选“空项目”,点击“确定”按钮,即可创建一个空项目。

接下来,有2处需要设置:

(1) 项目设置为Debug x64(或者Releasex64);

(2) 右键解决方案资源管理器中的项目名称“HelloWorld” → 生成依赖项(B) → 生成自定义(B)... → 打开“Visual C++生成自定义文件”对话框,勾选“masm(.targets, .props)”一项,点击“确定”按钮。

右键解决方案资源管理器中的项目名称HelloWorld中的“源文件”→ 添加(D) → 新建项(W)... → 打开“添加新项 - HelloWorld”对话框,选择“C++文件(.cpp)”,名称输入“HelloWorld.asm”,点击“添加”按钮。

HelloWorld.asm源文件的内容如下所示:
[Asm] 纯文本查看 复制代码
; include user32.inc
; include kernel32.inc

includelib user32.lib
includelib kernel32.lib

extern MessageBoxA:proc     ; 如果包含了user32.inc头文件,则不需要extern引入该函数
extern ExitProcess:proc     ; 如果包含了kernel32.inc头文件,则不需要extern引入该函数

.data
szText      db 'Hello World!', 0
szCaption   db 'Title', 0

.code
WinMain proc
    sub rsp, 28h

    xor r9d,  r9d
    mov r8,  offset szCaption
    mov rdx, offset szText
    xor rcx, rcx
    call MessageBoxA

    xor ecx, ecx
    call ExitProcess

    add rsp, 28h            ; 实际上执行完ExitProcess函数以后,这里不会得到执行
    ret
WinMain endp
end

; 也可以使用以下命令编译
; ml64 /c HelloWorld.asm
; link /subsystem:windows /entry:WinMain HelloWorld.obj


Ctrl + F5编译运行,提示“LNK2001 无法解析的外部符号 WinMainCRTStartup”,这里需要设置一下入口点函数为WinMain。右键解决方案资源管理器中的项目名称“HelloWorld” → 属性(R) → 打开“HelloWorld 属性页”对话框 → 配置属性 → 链接器 → 高级 → 入口点,输入“WinMain”,点击“确定”按钮。再次编译运行即可成功,如果需要切换为Releasex64,同样需要再设置一次入口点。


回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋|Windows中文网 ( 鲁ICP备2021014210号 )

GMT+8, 2025-6-9 23:29 , Processed in 0.091148 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表