• Vérifier l'existence d'un fichier ou non

    Le but est simple, utiliser l'appel système stat pour vérifier si un fichier existe sur le serveur.
    Le programme doit demander à l'utilisateur d'entrer le chemin absolu d'un fichier, puis doit vérifier s'il existe et donner une réponse.

    - Ecrivez le programme checkfile.asm suivant :

    section .data
    prompt_msg db 'Entrez le chemin du fichier : ', 0
    prompt_len equ $ - prompt_msg
    file_exists_msg db 'Le fichier existe.', 10
    file_exists_len equ $ - file_exists_msg
    file_not_exists_msg db "Le fichier n'existe pas.", 10
    file_not_exists_len equ $ - file_not_exists_msg
    buffer_size equ 4096 ; Taille du buffer pour lire le chemin du fichier

    section .bss
    input_path resb buffer_size ; Buffer pour stocker le chemin du fichier
    statbuf resb 144 ; Espace réservé pour la structure stat

    section .text
    global _start

    _start:
    ; Affiche le message de prompt
    mov rax, 4 ; syscall number pour 'write'
    mov rdi, 1 ; stdout
    mov rsi, prompt_msg
    mov rdx, prompt_len ; Longueur du message de prompt
    syscall

    ; Lire le chemin du fichier de l'utilisateur
    mov rax, 3 ; syscall number pour 'read'
    mov rdi, 0 ; stdin
    lea rsi, [input_path]
    mov rdx, buffer_size ; Nombre maximal de caractères à lire
    syscall

    ; Calculer la longueur de l'entrée et supprimer le caractère de nouvelle ligne
    mov rdi, rax ; sauvegarder la longueur lue dans rdi
    dec rdi ; ajuster pour le caractère de retour chariot
    mov byte [rsi+rdi], 0 ; supprimer le caractère de nouvelle ligne

    ; Appel de 'stat' pour vérifier si le fichier existe
    mov rax, 188 ; syscall number pour 'stat'
    lea rdi, [input_path] ; Premier argument : pointeur vers le chemin du fichier
    lea rsi, [statbuf] ; Deuxième argument : pointeur vers la structure stat
    syscall

    ; Vérifier si stat a réussi
    cmp rax, 0
    jne file_not_found
    mov rax, 4 ; syscall number pour 'write'
    mov rdi, 1 ; stdout
    mov rsi, file_exists_msg
    mov rdx, file_exists_len ; Longueur du message fichier existe
    syscall
    jmp exit

    file_not_found:
    mov rax, 4 ; syscall number pour 'write'
    mov rdi, 1 ; stdout
    mov rsi, file_not_exists_msg
    mov rdx, file_not_exists_len ; Longueur du message fichier non trouvé
    syscall

    exit:
    mov rax, 1 ; syscall number pour 'exit'
    xor rdi, rdi ; Code de sortie 0
    syscall

    - Assembler

    nasm -f elf64 checkfile.asm

    - Linker

    ld checkfile.o -o checkfile

    - Lancer le programme 

    ./checkfile

    Tags Tags : , ,
  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :