Afficher le contenu d'un fichier

Introduction

Ici, nous allons simplement afficher sur la console le contenu du fichier /tmp/test créé précédemment.


Créer le programme readfile.asm

section .data
filename db '/tmp/test', 0 ; Nom du fichier à lire
buffer db 256 dup(0) ; Buffer pour stocker les données lues
bufferSize equ $-buffer ; Taille du buffer

section .bss
fileDescriptor resb 1 ; Descripteur de fichier

section .text
global _start

_start:
; Ouvrir le fichier en lecture seule
mov rax, 5 ; sys_open (FreeBSD)
lea rdi, [filename] ; Chemin du fichier
xor rsi, rsi ; Flags (O_RDONLY)
xor rdx, rdx ; Mode (pas utilisé en lecture)
syscall
mov [fileDescriptor], rax ; Sauvegarder le descripteur de fichier

read_loop:
; Lire le contenu du fichier
mov rax, 3 ; sys_read (FreeBSD)
mov rdi, [fileDescriptor] ; Descripteur de fichier
lea rsi, [buffer] ; Buffer pour recevoir les données
mov rdx, bufferSize ; Nombre d'octets à lire
syscall

test rax, rax ; Vérifier si la lecture a réussi
js read_error ; Si rax est négatif, il y a eu une erreur de lecture
jz end_read ; Si rax est zéro, nous avons atteint la fin du fichier

; Écrire le contenu lu sur stdout
mov rdi, 1 ; Descripteur de fichier pour stdout
mov rdx, rax ; Utiliser la valeur retournée par sys_read pour le nombre d'octets à écrire
mov rax, 4 ; sys_write (FreeBSD)
mov rsi, buffer ; Adresse du début du buffer
syscall

jmp read_loop ; Répéter la lecture jusqu'à ce que nous atteignions la fin du fichier

read_error:
; Gérer l'erreur de lecture
; Vous pouvez insérer ici le code pour gérer les erreurs de lecture
; Par exemple, afficher un message d'erreur et sortir du programme
jmp end_program

end_read:
; Fermer le fichier
mov rax, 6 ; sys_close (FreeBSD)
mov rdi, [fileDescriptor] ; Descripteur de fichier
syscall

end_program:
; Terminer le programme
mov rax, 1 ; sys_exit (FreeBSD)
xor rdi, rdi ; Code de sortie 0
syscall

Assembler

nasm -f elf64 readfile.asm -o readfile.o

Linker

ld readfile.o -o readfile

Lancer le programme

./readfile


↑ Haut de page