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