Frage

Gibt es eine Möglichkeit, einen Schreib in schreibgeschützte Seite zu fangen?

ich tun ein Selbst -ähnlichen Objektsystem Plan, wo Sie das Objekt kopieren zu instanziiert. (Weil es einfach und kompakt, was klingt für den Rest Vergleich) Offensichtlich sind die Objekte zu diesem Zweck erstellt sollte werden in gewisser Weise schreibgeschützt ist. Ich habe gesehen, gibt es einen Weg, um Flagge etwas schreibgeschützt von den Programmschriften in den ELF. (RE, RWE, RW -flags)

Liefert der Schreibschutz überhaupt? Ich erinnere mich, es sollte eine segfault erhöhen, ist das wahr? Wie die Schreib in eine schreibgeschützte Seite zu fangen. Ist das eine gute Art und Weise zu implementieren, was ich will und gibt es einen besseren Weg?

War es hilfreich?

Lösung

Ja, können Sie mprotect .

Ja, ein Schreibvorgang auf dem geschützten Speicher wird eine segfault erhöhen. Sie können einen Handler installieren, z.B. in C ++:

std::signal(SIGSEGV, my_segv_handler_func);

Dies ist eine plausible Art und Weise zu tun, was Sie wollen, obwohl Sie eine Menge zusätzlichen Management Schmiere hinzufügen müßten, damit es funktioniert. Zum Beispiel diese Art von Schreiberkennung wird in Hardware durchgeführt und auf x86-Architekturen haben Sie eine Seitengröße von 4k bekommen. So können Sie die Dinge 4k zu einem Zeitpunkt, zu schützen, auf 4k-Grenzen ausgerichtet - nicht ein generisches „bei der Adresse X starten und gehen N Bytes“. Ich glaube, Sie würden entweder auf

  1. hat eine Abbildung von Objekten auf Seiten so dass Sie, ob ein identifizieren auf einer Seite schreibt, ist ein Schreiben in einem insbesondere geschütztes Objekt oder
  2. Ihre eigene Rolle malloc, die immer         weist auf 4k Grenzen, die Sie zwingen würde, eine zu verwenden,         Mindest alloc'd Blockgröße von 4k

Ich weiß nicht, die Spitze von meinem Kopf ab, wenn es ein besserer Weg, aber es klingt Spaß zu spielen. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top