汇编语言简易教程(5):环境构建
汇编语言简易教程(5):环境构建
最近在学习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
效果示意