Re: A propos du No eXecute d'AMD64

Top Page

Reply to this message
Author: Yves Martin
Date:  
To: guilde
Subject: Re: A propos du No eXecute d'AMD64
Selon Bernard Cassagne <Bernard.Cassagne@???>:

> Yves Martin wrote:
>
> > De souvenir, je crois que les premiers Linux x86 de Linus utilisaient la
> > segmentation pour ce problème justement - mais a été refait avec
> uniquement
> > de la pagination pour la portabilité entre plateformes.


> Tu es sur ?


Non mais j'ai retrouvé un vieux mail
(Merci Google: rechercher 'Linux history segmentation')
http://www-2.cs.cmu.edu/~awb/linux.history.html

D'après ce que j'ai pu comprendre, le task-switching de l'époque utilise
les segments.

dans la version actuelle mais je pense que Linux
définit un seul segment qui couvre toute la mémoire (avec droit en exécution)
et que sa valeur est posée dans tous les registres de segment (CS, DS, ES,
FS, GS, SS)

> J'ai toujours entendu dire que personne n'avait fait d'OS avec support
> des segments par manque de gestion du concept de segment par gcc/gld/gas


C'est effectivement un problème. Mais un code assembleur inline permet
de changer les valeurs des segments et cela devrait suffire au niveau du
kernel (un segment CS pour le code, un pour les données DS (et copie dans
ES, FS, GS), un pour la pile SS pour chaque application)
Une fois que le kernel les définit pour l'application, l'application n'a pas
besoin d'y toucher (d'ailleurs elle aurait du mal si elle ne connaît pas leur
valeur exacte).

Ce qui me fait sourire, c'est le message "segmentation fault",
"pagination fault" serait plus exact ;)

--
Yves Martin