Windows系统下汇编环境的搭建
最近在学习assembly64 时, 需要对程序进行编写 -> 生成汇编代码 -> 调试 -> 执行. 本文聚焦于如果在Windows环境下, 尽可能精简并且完整的构建一个汇编环境.
基于 Windows11, WSL Ubuntu22.04, vscode, 其他的系统/WSL发行版本. 您可以以本文作为简单的参考.
安装
WSL
你首先需要确保自己有一个WSL的发行版本.
互联网上已经有非常多的类似的文章了, 不再赘述. 您可以参考微软官方文档
WSL环境配置
需要确保安装以下组件:
- yasm
- ld
- gdb
sudo apt install yasm ddd gcc
VSCode配置
需要一些必须的插件
使用
创建asm文件
创建eg.asm
文件
; Simple example demonstrating basic program format and layout.
; Ed Jorgensen
; July 18, 2014
; ************************************************************
; Some basic data declarations
section .data
EXIT_SUCCESS equ 0 ; successful operation
SYS_exit equ 60 ; call code for terminate
bVar1 db 17
bVar2 db 9
bResult db 0
wVar1 dw 17000
wVar2 dw 9000
wResult dw 0
dVar1 dd 17000000
dVar2 dd 9000000
dResult dd 0
qVar1 dq 170000000
qVar2 dq 90000000
qResult dq 0
section .bss
bArr resb 10
; Code Section
section .text
global _start
_start:
; Performs a series of very basic addition operations
; to demonstrate basic program format.
; ----------
; Byte example
; bResult = bVar1 + bVar2
mov al, byte [bVar1]
add al, byte [bVar2]
mov byte [bResult], al
; ----------
; Double-word example
; dResult = dVar1 + dVar2
mov eax, dword [dVar1]
add eax, dword [dVar2]
mov dword [dResult], eax
; ----------
; Quadword example
; qResult = qVar1 + qVar2
mov rax, qword [qVar1]
add rax, qword [qVar2]
mov qword [qResult], rax
; ************************************************************
; Done, terminate program.
last:
mov rax, SYS_exit ; Call code for exit
mov rdi, EXIT_SUCCESS ; Exit program with success
syscall
汇编化
yasm -g dwarf2 -f elf64 eg.asm -l example.lst
链接
ld -g -o eg eg.o
运行
./eg
调试
因为目前的WSL支持GUI的显示, 所以可以直接使用ddd进行调试工作.
ddd ./eg