La section d'un exécutable qui contient du code est parfois appelée .text
section. Dans les architectures de mémoire segmentée, un segment mappé en tant que code est parfois appelé segment de texte. Le message d'erreur Unix «fichier texte occupé» ( ETXTBSY
) signifie «ce fichier est un programme en cours d'exécution».
Comment le texte est-il devenu un code exécutable (machine) ?
Une réponse idéale serait: expliquer le lien entre le mot et sa signification; fournir une citation pour l'origine ou au moins l'histoire du terme; donnez une idée des communautés qui l'utilisent.
terminology
history
file-structure
linking
Gilles 'SO- arrête d'être méchant'
la source
la source
.text
est une directive d'assemblage. L'assemblage est du texte.Réponses:
Le terme vient du langage d'assemblage. Je ne peux pas vérifier l'étymologie, mais je suppose que le nom vient de l'autre utilisation de la section. Alors que la
.data
section dénote des variables qui peuvent changer au cours de l'exécution, la.text
section contient des données qui ne changent pas pendant l'exécution, ce qui permet de les mettre dans la ROM si nécessaire. Cela le rend utile pour le code, oui, mais le rend également utile pour les chaînes de texte qui ne changent pas. C'est probablement de là que vient le terme.Pour répondre au commentaire de Griffin sur les fonctions de première classe, considérez le code python 3 suivant:
Le code que vous exécutez réellement
increment
finit par ressembler en interne à quelque chose comme:Ce code exécutable peut être placé dans la ROM. Il ne change jamais pendant l'exécution du programme, quel que soit le nombre de fois que vous appelez
counter()
. Ce qui change, c'est leself
pointeur et ses variables membres. Il faut les mettre.data
. Lorsque vousreturn increment
, vous renvoyez en fait une nouvelle instance d'un objet de fonction d'incrémentation. Vous ne créez pas dynamiquement de nouveau code exécutable à chaque fois. Le code lui-même est immuable même si son pointeur ne l'est pas.Le seul code qui doit être stocké dans la
.data
section est celui généré pareval()
, car il n'est pas connu du compilateur ou du compilateur JIT au début du programme. Cependant, même ce code est immuable. Si vous modifiez la chaîne et appelez àeval()
nouveau, vous ne modifiez pas le code de la dernière fois que vous avez appeléeval()
, vous créez un tout nouvel ensemble de code.Bien que le modèle de programmation puisse donner l'impression que le code est modifiable, le code d'auto-modification réel au niveau des instructions du processeur est dangereux et rarement trouvé en dehors des sujets vaudous du système d'exploitation tels que le changement de contexte de processus.
la source