MPROTECT SYSTÈME APPEL dans C

MPROTECT SYSTÈME APPEL dans C

L'appel du système MPROTECT () en C a été utilisé pour spécifier ou modifier la protection requise pour la (s) page (s) du (s) processus du processus. Cette (s) page (s) de mémoire comprend une part ou la plage d'adresses de l'intervalle qui est: [addr, addr + len-1]. Regardons l'appel du système MProtect () pour voir comment il fonctionne et est utilisé lors de l'utilisation d'un programme de page de mémoire dans l'Ubuntu 20.04 Système. Alors, connectez-vous à l'ubuntu 20.04 Système et lancez votre console de shell sur le bureau par Ctrl + Alt + T.

Exemple 01:

Ayons notre premier exemple pour l'appel du système MProtect (). Créez un fichier de type C dans le système du terminal à l'aide d'une requête «Touch» selon l'image de sortie indiquée.

$ touch MProtect1.c

Maintenant, le fichier a été correctement créé, ouvrez-le dans un éditeur comme GNU ou VIM. Nous avons un éditeur GNU installé et configuré sur notre Ubuntu 20.04 Système. Nous l'avons donc utilisé pour ouvrir le fichier C nouvellement fabriqué conformément aux instructions indiquées dans l'image.

$ nano MProtect1.c

A maintenant additionné certaines bibliothèques C requises pour le fonctionnement d'un appel système MProtect (). Nous avons défini une méthode d'erreur de poignée intégrée utilisée pour afficher le message transmis dans son argument sur un problème. Une méthode «gestionnaire» a été définie ici, et elle génère le signal Sigsegv lorsqu'une méthode de gestionnaire essaie d'obtenir de la mémoire d'une manière qui s'introduit sur la protection. Il récupère également l'adresse de la page où cette erreur a été trouvée.

La fonction principale a été définie ici pour démarrer l'exécution du code C. Un pointeur de type de caractère a été défini et un «psize» entier a été défini pour définir la taille de la page. La structure Sigaction «S» a été définie ici pour gérer un signal. Le drapeau SigAction a été utilisé pour obtenir la méthode de traitement du signal à l'aide de SA_Siginfo. Dans l'exécution, le système a bloqué l'ensemble supplémentaire de signaux à l'aide de SA_MASK et rend la file d'attente vide par sigemptyset. Le SA_SIGACTION stocke l'adresse du gestionnaire de signaux pour les signaux qui ne sont pas en file d'attente.

Si la fonction Sigaction passe le signal comme «sigsegv», pointeur et méthode nul et la fonction renvoie -1, l'erreur de poignée obtiendra «Sigaction» comme l'erreur et que la taille de la page a été enregistrée sur psize. Si la taille est inférieure à 0, l'erreur sysconf sera envoyée. La mémoire de 4 pages a été affectée à un tampon. Si le tampon est nul, l'erreur «memalign» sera envoyée. La déclaration d'impression affichera l'adresse initiale d'un tampon. Une autre instruction IF a été utilisée ici pour vérifier la protection de la mémoire et incrémenter l'index du tampon.

Lors de la commande et de l'exécution de la compilation par GCC, nous avons qu'il affiche la région d'origine et affiche ensuite le système a un signal Sigsegv au fur et à mesure que quelque chose s'écarte du chemin.

$ gcc mprotect1.c
$ ./un.dehors

Exemple 02:

Ayons un autre exemple pour démontrer l'appel du système MProtect (). Créez d'abord un nouveau fichier.

$ touch MProtect2.c

Ouvrir le fichier.

$ nano MProtect2.c

Une fois l'en-tête inclus, un entier et un pointeur statique ont été initialisés. La méthode du gestionnaire a été utilisée ici pour montrer que la mémoire a été accessible. L'appel du système MProtect a été utilisé ici pour passer la mémoire, la taille et certains autres arguments comme paramètres.

La méthode principale contient le descripteur de type entier et le type de structure Sigaction «S». Ensuite, nous avons installé une méthode Handler () comme gestionnaire Sigsegv. Après cela, j'ai alloué une mémoire d'une pages au chemin du fichier affiché et l'ai enregistré dans le descripteur de fichiers «F». Après avoir cartographié la mémoire, le descripteur a été fermé. Nous utiliserons le pointeur variable «M» pour obtenir une copie privée en écrivant sur une page. Ensuite, nous avons ajouté l'appel du système MProtect pour éviter d'attribuer des droits d'écriture à la mémoire. Ensuite, nous avons écrit 1 sur la page. Cela écrira sur la mémoire attribuée de la page. L'instruction d'impression a été utilisée pour afficher le message d'achèvement, et la méthode munmap () a été utilisée ici pour démapper la mémoire allouée.

Compilons et exécutons ce code mis à jour dans le terminal en utilisant le «GCC» et «./un.Commandes out. Le système montre que la mémoire a été accessible, attribuée et non cartographiée à une seule page. Le «tous terminés!»Le message a été affiché sur votre écran.

$ ./un.dehors

Conclusion:

Dans cet article, nous avons développé deux exemples pour comprendre le fonctionnement de l'appel système MPROTECT () pour protéger la mémoire attribuée à une page. Les exemples contiennent l'utilisation des fonctions du gestionnaire; MÉMOIRE MÉTHODES UNMAP, STRUCTURES SIGACTIONNEL.