Dans ton programme, tu fais effectivement un buffer overflow hors de la pile, mais cela le rend à peu près inutilisable : comment veux-tu convaincre le processeur de faire un saut dans tes données??
\cycliste{on m'aurait menti ?}
plus sérieusement, tu as des données dans ES/DS et ta pile dans SS.
explique moi comment tu peux sortir de SS mais pas de ES/DS par overflow ?
si je ne m'abuse [SS:SP] est incremental et donc le pointeur de retour n'est pas accessible si l'on copie trop de données dans la pile.
sinon, NX a à voir avec un modele plat de mémoire, ou ( de "ou bien" ) des segments données/code qui se superposent.
une page non executable qui se retrouvent dans CS ne sera pas executé ( fear ). NX palie juste au fait que le modele segmenté n'est plus mis en oeuvre dans les OS pour des soucis de portabilité et de facilité de developpement.
pour ce qui est de la pagination, tu proposais l'exception de gestion de faute de page et non de faute de segment ... je te disais juste que tu te trompais d'exception.
sinon pour obtenir une faute sur un segment ... il te faut des segments ( c'est d'une logique assez vile je l'admet ), que le segment soit un segment de mémoire alloué "physiquement" ( LDT / GDT ) ou "logiquement" ( table d'allocation noyau geré a coup de malloc/free ). dans le cas où l'allocation "logique" n'est pas contrainte par une allocation "physique" je vois mal comment le systeme peut gerer cela ( à moins d'utiliser des appels systemes pour acceder aux zones mémoire qui fait qu'il peut y avoir des controles de dépassement ).
puis utiliser les pages du systeme de pagination pour gerer les segments d'allocation ... c'est assimiler la page à un segment à taille fixe.
PS: il se peut que je me trompe, c'est probable. je vais me replonger dans mes bouquins ASM i80286/i80386/i80486 . entre temps, si tu as des pointeurs précis sur le sujet ( ma réponse ayant été sur les archi Intel IA32, je t'invite à rester autour de ces archis );
[^] # Re: archi IA32
Posté par Mouns . En réponse au journal question : est-ce que la zone de code est modifiable. Évalué à 2.
\cycliste{on m'aurait menti ?}
plus sérieusement, tu as des données dans ES/DS et ta pile dans SS.
explique moi comment tu peux sortir de SS mais pas de ES/DS par overflow ?
si je ne m'abuse [SS:SP] est incremental et donc le pointeur de retour n'est pas accessible si l'on copie trop de données dans la pile.
sinon, NX a à voir avec un modele plat de mémoire, ou ( de "ou bien" ) des segments données/code qui se superposent.
une page non executable qui se retrouvent dans CS ne sera pas executé ( fear ). NX palie juste au fait que le modele segmenté n'est plus mis en oeuvre dans les OS pour des soucis de portabilité et de facilité de developpement.
pour ce qui est de la pagination, tu proposais l'exception de gestion de faute de page et non de faute de segment ... je te disais juste que tu te trompais d'exception.
sinon pour obtenir une faute sur un segment ... il te faut des segments ( c'est d'une logique assez vile je l'admet ), que le segment soit un segment de mémoire alloué "physiquement" ( LDT / GDT ) ou "logiquement" ( table d'allocation noyau geré a coup de malloc/free ). dans le cas où l'allocation "logique" n'est pas contrainte par une allocation "physique" je vois mal comment le systeme peut gerer cela ( à moins d'utiliser des appels systemes pour acceder aux zones mémoire qui fait qu'il peut y avoir des controles de dépassement ).
puis utiliser les pages du systeme de pagination pour gerer les segments d'allocation ... c'est assimiler la page à un segment à taille fixe.
PS: il se peut que je me trompe, c'est probable. je vais me replonger dans mes bouquins ASM i80286/i80386/i80486 . entre temps, si tu as des pointeurs précis sur le sujet ( ma réponse ayant été sur les archi Intel IA32, je t'invite à rester autour de ces archis );