Windows系统下汇编环境的搭建

Windows系统下汇编环境的搭建

最近在学习assembly64 时, 需要对程序进行编写 -> 生成汇编代码 -> 调试 -> 执行. 本文聚焦于如果在Windows环境下, 尽可能精简并且完整的构建一个汇编环境.

基于 Windows11, WSL Ubuntu22.04, vscode, 其他的系统/WSL发行版本. 您可以以本文作为简单的参考.

安装

WSL

你首先需要确保自己有一个WSL的发行版本.

互联网上已经有非常多的类似的文章了, 不再赘述. 您可以参考微软官方文档

WSL环境配置

需要确保安装以下组件:

  1. yasm
  2. ld
  3. gdb
sudo apt install yasm ddd gcc

VSCode配置

需要一些必须的插件

x86 and x86_64 Assembly

使用

创建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

效果示意

image

posted @ 2024-04-09 17:55  pDJJq  阅读(90)  评论(0编辑  收藏  举报