Question

Existe-t-il un moyen d’attraper une écriture dans une page protégée en écriture?

Je prévois de créer un système d’objets semblable à celui de l’autre, où vous copiez l’objet pour l’instancier. (parce que cela semble simple et compact comparé au reste) Évidemment, les objets créés à cet effet doivent être protégés en écriture d'une manière ou d'une autre. J'ai vu qu'il y avait un moyen de signaler quelque chose de protégé en écriture à partir des en-têtes de programme dans le fichier ELF. (Drapeaux RE, RWE, RW)

Est-ce que cela fournit une protection en écriture? Je me souviens qu'il devrait y avoir une erreur de segmentation, est-ce vrai? Comment attraper l'écriture dans une page protégée en écriture. Est-ce un bon moyen de mettre en œuvre ce que je veux et existe-t-il un meilleur moyen?

Était-ce utile?

La solution

Oui, vous pouvez utiliser mprotect .

Oui, une écriture dans une mémoire protégée provoquera une erreur de segmentation. Vous pouvez installer un gestionnaire, par exemple en C ++:

std::signal(SIGSEGV, my_segv_handler_func);

C’est une façon plausible de faire ce que vous voulez, bien que vous deviez ajouter beaucoup de ressources de gestion supplémentaires pour que cela fonctionne. Par exemple, ce type de détection d'écriture se fait dans le matériel, et sur les architectures x86, vous avez une taille de page de 4 ko. Ainsi, vous pouvez protéger des éléments 4k à la fois, alignés sur des limites de 4k - et non d’un générique "commencez à l’adresse X et passez à N octets". Je crois que tu devrais soit

  1. mapper des objets sur des pages de sorte que vous puissiez identifier si un écrire sur une page est une écriture sur un objet protégé particulier, ou
  2. rouler votre propre malloc qui toujours         alloue sur 4k limites, ce qui vous obligerait à utiliser un         taille de bloc d'allocation minimale de 4k

Je ne sais pas par coeur s'il y a une meilleure façon, mais ça a l'air amusant de jouer avec. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top