• # script != binaire

    Posté par (site web personnel, Mastodon) . En réponse au message impossible de modifier un exécutable lorsqu'il est en exécution. Évalué à 7.

    Il me semblait qu'il était impossible sous linux de modifier le code d'un programme en cours d'exécution,

    Oui, mais uniquement les binaires compilés, et pas les langages interprétés, tel que les scripts écrits en bash. Quand tu vas lancer ton script, bash va lire le fichier, et va commencer à l'interpréter à partir de ce qu'il a en mémoire, et n'a donc plus besoin du code source. Ceci dit, modifier un script bash en cours d'exécution est une mauvaise idée, car bash va parfois le relire à partir d'un 'certain' offset. Si il est modifié, l'offset n'est plus bon, et paf.

    Un binaire, par contre n'est parfois pas entièrement lu en mémoire, voire même peut en être viré si le kernel a besoin de place. C'est (en gros) les fautes de pages sur une partie du prog absente qui permettent de 'remapper' le binaire en mémoire afin de continuer l'exécution. Pour éviter que le fichier disque soit modifié, il est verrouillé par le système. Voir le man de open(2) et chercher l'erreur ETXTBSY.