Mprotect system chiama in c

Mprotect system chiama in c

La chiamata di sistema mProtect () in C è stata utilizzata per specificare o modificare la protezione richiesta per le pagine di memoria del processo. Questa pagina (e) di memoria comprende una quota o tutta l'intervallo di indirizzi nell'intervallo che è: [ADDR, ADDR+LEN-1]. Diamo un'occhiata alla chiamata di sistema mProtect () per vedere come funziona e viene utilizzato durante l'utilizzo di qualche programma di pagina di memoria in Ubuntu 20.04 Sistema. Quindi, accedi da Ubuntu 20.04 Sistema e avvia la tua console Shell sul desktop di Ctrl+Alt+T.

Esempio 01:

Facciamo il nostro primo esempio per la chiamata di sistema mprotect (). Crea un file di tipo C nel sistema all'interno del terminale utilizzando una query "tocco" secondo l'immagine di output indicato.

$ touch mprotect1.C

Ora il file è stato creato correttamente, aprilo all'interno di alcuni editor come GNU o VIM. Abbiamo un editor GNU installato e configurato sul nostro Ubuntu 20.04 Sistema. Quindi, lo abbiamo usato per aprire il file C appena realizzato secondo l'istruzione mostrata nell'immagine.

$ nano mprotect1.C

Ora ha aggiunto alcune librerie C richieste per il funzionamento di una chiamata di sistema mprotect (). Abbiamo definito un metodo incorporato incorporato utilizzato per visualizzare il messaggio passato nel suo argomento su qualche problema. Un metodo "gestore" è stato definito qui e genera il segnale Sigsegv quando un metodo di gestore cerca di ottenere la memoria in un modo che si intromette sulla protezione. Recupera anche l'indirizzo della pagina in cui è stato trovato questo errore.

La funzione principale è stata definita qui per avviare l'esecuzione del codice C. È stato definito un puntatore del tipo di carattere e un intero "psize" è stato definito per impostare la dimensione della pagina. La Struction Sigaction "S" è stata definita qui per gestire un segnale. Il flag di Sigaction è stato utilizzato per ottenere specificare il metodo di gestione del segnale usando SA_SIGINFO. All'interno dell'esecuzione, il sistema ha bloccato il set aggiuntivo di segnali utilizzando SA_MASK e rende la coda vuota di SigemptySet. Il SA_SIGAction memorizza l'indirizzo del gestore del segnale per i segnali che non sono in coda.

Se il segnale del passaggio della funzione di SIGAction come "SIGSEGV", puntatore e metodo null e la funzione restituisce -1, l'errore maneggere otterrà "Sigazione" come errore e la dimensione della pagina è stata salvata per PSIZE. Se la dimensione è inferiore a 0, l'errore SYSCONF verrà inviato. La memoria di 4 pagine è stata assegnata al buffer. Se il buffer è nullo, verrà inviato l'errore "MemAline". L'istruzione di stampa visualizzerà l'indirizzo iniziale di un buffer. Un'altra istruzione IF è stata utilizzata qui per controllare la protezione della memoria e incrementare l'indice del buffer.

Al momento della compilazione tramite comando e esecuzione GCC, abbiamo capito che mostra la regione originale e quindi visualizza il sistema ha il segnale SigSegv mentre qualcosa va di mezzo.

$ GCC Mprotect1.C
$ ./UN.fuori

Esempio 02:

Facciamo un altro esempio per dimostrare la chiamata di sistema mprotect (). Crea prima un nuovo file.

$ touch mprotect2.C

Apri il file.

$ nano mprotect2.C

Dopo che l'intestazione è stata inclusa, sono stati inizializzati un numero intero e un puntatore statico. Il metodo del gestore è stato usato qui per mostrare che è stato accessibile alla memoria. La chiamata di sistema mprotect è stata usata qui per passare memoria, dimensioni e alcuni altri argomenti come parametri.

Il metodo principale contiene descrittore di tipo intero e tipo di struttura "S". Quindi abbiamo installato un metodo gestore () come gestore SIGSEGV. Successivamente, ho assegnato una memoria di 1 pagina al percorso del file mostrato e l'ho salvato al descrittore del file "F". Dopo aver mappato la memoria, il descrittore è stato chiuso. Useremo il puntatore variabile "M" per ottenere una copia privata scrivendo su una pagina. Quindi abbiamo aggiunto la chiamata del sistema Mprotect per impedire l'assegnazione dei diritti di scrittura alla memoria. Quindi abbiamo scritto 1 sulla pagina. Questo scriverà nella memoria assegnata della pagina. L'istruzione di stampa è stata utilizzata per visualizzare il messaggio di completamento e il metodo MunMap () è stato utilizzato qui per sbarcare la memoria allocata.

Compiliamo ed eseguiamo questo codice aggiornato nel terminale utilizzando "GCC" e "./UN.comandi ”. Il sistema mostra che la memoria è stata accessibile, assegnato e non mappato a una singola pagina. Il "tutto completato!"Il messaggio è stato visualizzato sullo schermo.

$ ./UN.fuori

Conclusione:

In questo articolo, abbiamo elaborato due esempi per comprendere il funzionamento della chiamata di sistema mprotect () per proteggere la memoria assegnata a una pagina. Gli esempi contengono l'utilizzo delle funzioni del gestore; Metodi di mappa della memoria, strutture di sigAction e puntatori per ottenere i risultati desiderati.