La llamada del sistema mProtect () en C se ha utilizado para especificar o cambiar la protección requerida para las páginas de memoria del proceso del proceso. Esta (s) página (s) de memoria comprende una parte o la totalidad del rango de direcciones en el intervalo que es: [ADDR, ADDR+LEN-1]. Veamos la llamada del sistema mprotect () para ver cómo funciona y se usa mientras se usa algún programa de página de memoria en el Ubuntu 20.04 sistema. Entonces, inicie sesión desde el Ubuntu 20.04 Sistema y inicie su consola de shell en el escritorio por Ctrl+Alt+T.
Ejemplo 01:
Tengamos nuestro primer ejemplo para la llamada del sistema mprotect (). Cree un archivo de tipo C en el sistema dentro del terminal utilizando una consulta "toque" según la imagen de salida establecida.
$ touch mprotect1.CAhora el archivo se ha creado correctamente, abráralo dentro de algún editor como GNU o VIM. Tenemos un editor de GNU instalado y configurado en nuestro Ubuntu 20.04 sistema. Entonces, lo hemos estado usando para abrir el archivo C recién hecho según la instrucción que se muestra en la imagen.
$ nano mprotect1.CAhora se suma algunas bibliotecas C requeridas para el funcionamiento de una llamada del sistema mProtect (). Hemos definido un método de error de mango incorporado utilizado para mostrar el mensaje aprobado en su argumento sobre algún tema. Aquí se ha definido un método "controlador", y genera la señal SigseGV cuando un método de controlador intenta obtener memoria de una manera que se entromete con la protección. También obtiene la dirección de la página donde se ha encontrado este error.
La función principal se ha definido aquí para comenzar la ejecución del código C. Se ha definido un puntero de tipo de personaje, y se ha definido un entero "psize" para establecer el tamaño de la página. La estructura Sigaction "s" se ha definido aquí para manejar una señal. El indicador SigAction se ha utilizado para especificar el método de manejo de señal usando SA_SIGINFO. Dentro de la ejecución, el sistema ha bloqueado el conjunto adicional de señales usando SA_MASK y hacer que la cola se vacíe por SigemptySet. El SA_SIGACTION almacena la dirección del controlador de señal para las señales que no están en cola.
Si la función SigAction Function Pass como "SigseGV", Pointer y NULL Method y la función Devuelve -1, el error del identificador obtendrá "Sigaction" como error, y el tamaño de la página se ha guardado en Psize. Si el tamaño es inferior a 0, se enviará el error SYSCONF. La memoria de 4 páginas se ha asignado a buffer. Si el búfer es nulo, se enviará el error "memalign". La instrucción de impresión mostrará la dirección inicial de un búfer. Otra instrucción si se ha utilizado aquí para verificar la protección de la memoria e incrementar el índice del búfer.
Tras la compilación por comando y ejecución de GCC, tenemos que muestra la región original y luego muestra que el sistema tiene señal SigseGV a medida que algo sale del camino.
$ GCC mProtect1.CEjemplo 02:
Tengamos otro ejemplo para demostrar la llamada del sistema mprotect (). Crea un nuevo archivo primero.
$ touch mprotect2.CAbre el archivo.
$ nano mprotect2.CDespués de que se ha incluido el encabezado, se ha inicializado un entero y un puntero estático. El método del controlador se ha utilizado aquí para mostrar que se ha accedido a la memoria. La llamada del sistema mProtect se ha utilizado aquí para pasar la memoria, el tamaño y algunos otros argumentos como parámetros.
El método principal contiene descriptor de tipo entero y tipo de estructura Sigaction "S". Luego hemos instalado un método Handler () como el controlador SigseGV. Después de eso, asigné una memoria de 1 página a la ruta del archivo mostrado y la guardé en el descriptor del archivo "F". Después de mapear la memoria, el descriptor se ha cerrado. Usaremos el puntero variable "M" para obtener una copia privada escribiendo en una página. Luego hemos agregado la llamada del sistema mProtect para evitar asignar derechos de escritura a la memoria. Entonces hemos escrito 1 en la página. Esto escribirá en la memoria asignada de la página. La instrucción de impresión se ha utilizado para mostrar el mensaje de finalización, y el método munmap () se ha utilizado aquí para deshacer la memoria asignada.
Compilaron y ejecutemos este código actualizado en el terminal utilizando el "GCC" y "./a.Comandos de fuera ". El sistema muestra que la memoria ha sido accedida, asignada y desactivada a una sola página. El "todos completados!Se ha mostrado el mensaje en su pantalla.
ps ./a.afueraConclusión:
En este artículo, hemos elaborado en dos ejemplos para comprender el funcionamiento de la llamada del sistema mprotect () para proteger la memoria asignada a una página. Los ejemplos contienen el uso de funciones de controlador; Métodos de Memory Unmap, estructuras Sigaction y punteros para lograr los resultados deseados.