• Faire la mise-à-jour du système

    Le but ici est d'enchaîner l'exécution des commandes freebsd-update -F fetch et freebsd-update -F install silencieusement et d'afficher la chaîne "- le système est à jour" à la fin :

    Créer le programme update_system.asm :

    section .data
    message3 db "- système à jour", 10, 0
    message3_len equ $ - message3

    command db '/bin/sh', 0
    arg1 db '-c', 0
    arg2_1 db 'freebsd-update -F fetch >/dev/null 2>&1 && freebsd-update -F install >/dev/null 2>&1', 0
    argv dq command, arg1, arg2_1, 0

    envp dq 0

    section .text
    global _start

    _start:
    ; Exécuter les commandes freebsd-update
    mov rdi, command
    mov rsi, argv
    call execute_command

    ; Afficher le message final
    mov rax, 4
    mov rdi, 1
    lea rsi, [message3]
    mov rdx, message3_len
    syscall

    ; Terminer le programme
    mov rax, 1
    xor rdi, rdi
    syscall

    execute_command:
    ; Sauvegarder les arguments sur la pile
    push rdi
    push rsi

    ; Créer un nouveau processus
    mov rax, 2
    syscall

    ; Vérifier si nous sommes dans le processus parent ou enfant
    test rax, rax
    jz child_process

    ; Processus parent, attendre que le processus enfant termine
    mov rdi, rax
    xor rsi, rsi
    xor rdx, rdx
    mov rax, 7
    syscall

    ; Restaurer les arguments et retourner
    pop rsi
    pop rdi
    ret

    child_process:
    ; Restaurer les arguments
    pop rsi
    pop rdi

    ; Exécuter la commande dans le processus enfant
    mov rax, 59
    lea rdx, [envp]
    syscall

    ; Si execve échoue, sortir avec un code d'erreur
    mov rax, 1
    mov rdi, 1
    syscall

     

    - Assembler

     

    nasm -f elf64 update_system.asm -o update_system.o

     

    - Linker

     

    ld update_system.o -o update_system

     

    - Lancer le programme 

     

    ./update_system

    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 :