Faire la mise-à-jour du système

Introduction

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 :


Code source : 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


↑ Haut de page