Je repars du programme assembleur 32 bits vu au chapitre 20
pour l’adapter à l’assembleur 64 bits. (source du programme).
Après les modifications des registres, des accès à la pile
il ne reste plus qu’à trouver les codes des appels système en en 64 bits. Hélas
l’appel fork ne semble pas exister en 64 bits et donc je modifie le programme
pour utiliser l’appel clone.
Ces modifications refusant de fonctionner, j’effectue des
recherches sur internet pour trouver la source de mon erreur. En fait, les
paramètres de la fonction clone sont identiques à la fonction fork du 32 bits
et donc ne correspondent pas à la première description que j’avais trouvée. En
effet la documentation des appels système en 64 bits n’est pas très disponible.
J’adapte aussi les appels système pour les fonctions sleep
et wait4 sans problème. Par contre je ne trouve pas de fonction pause en 64
bits.
Après recherche sur internet je trouve une solution en
utilisant les appels système rt_sigprocmask et rt_sigsuspend.
Tout fonctionne parfaitement après quelques tests !!
Puis, j’ai réécrit un programme pour tester l’exécution d’une
commande Linux en utilisant l’appel system execve. Pour cela je me suis
contenté de lancer la commande ls –l mais vous trouverez en commentaire la
chaine de caractères pour lancer une commande ping.
Ici la seule difficulté est de passer correctement les
paramètres à l’appel systeme qui est un peu différent de l’appel 32 bits.
Comme en 32 bits, vous remarquerez que l’exécution correcte de la commande interrompt le programme appelant.
Aucun commentaire:
Enregistrer un commentaire