Mprotect -Systemaufruf in c

Mprotect -Systemaufruf in c

Der Mprotect () -Systemaufruf in C wurde verwendet, um den erforderlichen Schutz für die Speicherseite des Prozesses anzugeben oder zu ändern. Diese Speicherseite (en) umfasst eine Aktie oder den gesamten Adressbereich in dem Intervall: [ADDR, ADDR+LEN-1]. Schauen wir uns den Aufruf von Mprotect () an, um zu sehen, wie es funktioniert, und wird verwendet, während Sie ein Speicherseitenprogramm im Ubuntu 20 verwenden.04 System. Melden Sie sich also vom Ubuntu 20 an.04 System und starten Sie Ihre Shell -Konsole auf dem Desktop mit Strg+Alt+T.

Beispiel 01:

Lassen Sie uns unser erstes Beispiel für den Mprotect () -Systemanruf haben. Erstellen Sie eine C-Type im System im Terminal unter Verwendung einer Abfrage „Berührung“ gemäß dem angegebenen Ausgangsbild.

$ touch mprotect1.C

Jetzt wurde die Datei ordnungsgemäß erstellt, öffnen Sie sie in einem Editor wie GNU oder VIM. Wir haben einen GNU -Editor installiert und konfiguriert auf unserem Ubuntu 20.04 System. Wir haben es also verwendet, um die neu gemachte C -Datei gemäß der im Bild angegebenen Anweisung zu öffnen.

$ nano mprotect1.C

Fügen Sie nun einige erforderliche C -Bibliotheken für die Arbeit eines Mprotect () -Systemaufrufs hinzu. Wir haben eine eingebaute Verhandlungsmethode definiert, mit der die in ihrem Argument übergebene Meldung angezeigt wird. Hier wurde eine Methode „Handler“ definiert und erzeugt das Signal Sigsegv, wenn eine Handler -Methode versucht, Speicher auf eine Weise zu erhalten, die den Schutz eindringt. Es holt auch die Seitenadresse ab, an der dieser Fehler gefunden wurde.

Die Hauptfunktion wurde hier definiert, um die Ausführung von C -Code zu starten. Ein Zeigertyp -Zeiger wurde definiert, und es wurde ein ganzzahliger „Pst“ definiert, um die Seitengröße festzulegen. Die Struktur -Sigaktion „S“ wurde hier definiert, um ein Signal zu verarbeiten. Das Sigaktionsflag wurde verwendet, um die Signalhandhabungsmethode mit SA_SIGINFO anzugeben. Innerhalb der Ausführung hat das System den zusätzlichen Satz von Signalen mit SA_Mask blockiert und die Warteschlange durch SigEmptySet leer. Die SA_SIGACTTION speichert die Adresse des Signalhandlers für die Signale, die nicht in der Warteschlange stehen.

Wenn die Sigaktionsfunktion das Signal als „sigsegv“, Zeiger- und Nullmethode und die Funktion –1 zurückgibt, erhält der Handelsfehler „Sigaktion“ als Fehler, und die Seitengröße wurde auf PSIZE gespeichert. Wenn die Größe weniger als 0 ist, wird der Sysconf -Fehler gesendet. Der Speicher von 4 Seiten wurde dem Puffer zugewiesen. Wenn der Puffer null ist, wird der Fehler „Memalign“ gesendet. In der Print -Anweisung wird die Anfangsadresse eines Puffer angezeigt. Eine andere IF -Anweisung wurde hier verwendet, um den Speicherschutz zu überprüfen und den Index des Puffers zu erhöhen.

Nach der Zusammenstellung von GCC -Befehl und -ausführung haben wir das angezeigt, dass die ursprüngliche Region angezeigt wird, und dann hat das System ein SigsegV -Signal, wenn etwas aus dem Weg geht.

$ gcc Mprotect1.C
$ ./A.aus

Beispiel 02:

Lassen Sie uns ein weiteres Beispiel haben, um den Aufruf von Mprotect () -System zu demonstrieren. Erstellen Sie zuerst eine neue Datei.

$ touch mprotect2.C

Öffne die Datei.

$ nano mprotect2.C

Nachdem der Header aufgenommen wurde, wurde ein ganzzahliger und statischer Zeiger initialisiert. Die Handler -Methode wurde hier verwendet, um zu zeigen, dass auf den Speicher zugegriffen wurde. Der Mprotect -Systemaufruf wurde hier verwendet, um Speicher, Größe und einige andere Argumente als Parameter zu übergeben.

Die Hauptmethode enthält den Ganzzahl -Deskriptor und den Strukturtyp Sigaction "S". Dann haben wir eine Handler () -Methode als SigsegV -Handler installiert. Danach habe ich dem angezeigten Dateipfad einen 1-seitigen Speicher zugewiesen und ihn für den Dateideskriptor "F" gespeichert. Nach dem Zuordnen des Speichers wurde der Deskriptor geschlossen. Wir werden den Variablenzeiger „M“ verwenden, um eine private Kopie durch Schreiben auf einer Seite zu erhalten. Dann haben wir den Aufruf von Mprotect -System hinzugefügt, um zu verhindern. Dann haben wir 1 auf der Seite geschrieben. Dies schreibt auf den zugewiesenen Speicher der Seite. Die Druckanweisung wurde verwendet, um die Abschlussmeldung anzuzeigen, und die Methode munmap () wurde hier verwendet, um den zugewiesenen Speicher zu entfalten.

Lassen Sie uns diesen aktualisierten Code im Terminal mit dem „GCC“ und “kompilieren und ausführen./A.Out “, Befehle. Das System zeigt, dass auf den Speicher auf eine einzelne Seite zugegriffen, zugeordnet und nicht zugeordnet wurde. Die „alle fertiggestellt!Meldung wurde auf Ihrem Bildschirm angezeigt.

$ ./A.aus

Abschluss:

In diesem Artikel haben wir zwei Beispiele ausgearbeitet, um die Arbeit des Mprotect () -Systemaufrufs zu verstehen, um den zugewiesenen Speicher auf eine Seite zu schützen. Die Beispiele enthalten die Verwendung von Handlerfunktionen; Gedächtnis -Unmap -Methoden, Sigaktionsstrukturen und Zeiger, um die gewünschten Ergebnisse zu erzielen.