MProtect systemanrop i C

MProtect systemanrop i C

MProTect () systemanrop i C har blitt brukt til å spesifisere eller endre den nødvendige beskyttelsen for prosessens minneside (er). Denne minnesiden (e) inneholder en andel eller hele adresseområdet i intervallet som er: [Addr, Addr+Len-1]. La oss se på MProTect () -systemanropet for å se hvordan det fungerer og brukes mens du bruker et minneside -program i Ubuntu 20.04 System. Så logger du inn fra Ubuntu 20.04 System og starte skallkonsollen på skrivebordet av Ctrl+ALT+T.

Eksempel 01:

La oss ha vårt første eksempel på MProtect () -systemanropet. Lag en C-type fil i systemet i terminalen ved hjelp av en spørring “Touch” i henhold til det oppgitte utgangsbildet.

$ Touch mProtect1.c

Nå er filen blitt opprettet riktig, og åpner den i noen redaktører som GNU eller VIM. Vi har en GNU -redaktør installert og konfigurert på Ubuntu 20.04 System. Så vi har brukt den til å åpne den nyopplagte C -filen i henhold til instruksjonen vist på bildet.

$ nano mprotect1.c

Nå la opp noen påkrevde C -biblioteker for å jobbe med en mProtect () systemanrop. Vi har definert en innebygd håndteringsmetode som brukes til å vise meldingen som er gitt i argumentet etter noen spørsmål. En metode "behandler" er blitt definert her, og den genererer signalet sigsegv når en behandler metode prøver å få minne på en måte som inntrenger ved beskyttelsen. Den henter også sideadressen der denne feilen er funnet.

Hovedfunksjonen er definert her for å starte utførelsen av C -koden. En karaktertypepeker er definert, og et heltall "psize" er definert for å angi sidestørrelse. Strukturen Sigaction “S” er blitt definert her for å håndtere et signal. Sigaction -flagget har blitt brukt for å spesifisere signalbehandlingsmetoden ved hjelp av SA_SIGINFO. Innenfor utførelsen har systemet blokkert det ekstra settet med signaler ved hjelp av SA_MASK og gjort køen tom av Sigemptyset. SA_SIGACTION lagrer adressen til signalbehandleren for signalene som ikke er i kø.

Hvis Sigaction -funksjonen passerer signalet som "sigsegv", peker og nullmetode og funksjonen returnerer -1, vil håndtakfeilen få "Sigaction" som feilen, og sidestørrelsen er lagret i psize. Hvis størrelsen er mindre enn 0, vil sysconf -feilen bli sendt. Minnet på 4 sider er tildelt buffer. Hvis bufferen er null, vil feilen "memalign" bli sendt. Utskriftserklæringen vil vise den første adressen til en buffer. En annen IF -uttalelse har blitt brukt her for å sjekke minnebeskyttelse og øke indeksen for bufferen.

Etter samlingen av GCC -kommando og utførelse, har vi fått at den viser den opprinnelige regionen og deretter viser systemet har SigsEGV -signal når noe går ut av veien.

$ GCC MPROTECT1.c
$ ./en.ute

Eksempel 02:

La oss ha et annet eksempel for å demonstrere MProtect () -systemanropet. Opprett en ny fil først.

$ Touch mProtect2.c

Åpne filen.

$ nano mprotect2.c

Etter at overskriften er inkludert, er et heltall og statisk peker blitt initialisert. Handlermetoden har blitt brukt her for å vise at minnet er tilgjengelig. MProtect System -samtalen har blitt brukt her for å passere minne, størrelse og noen andre argumenter som parametere.

Hovedmetoden inneholder heltalls -deskriptor og strukturtype Sigaction “s”. Så har vi installert en behandler () -metode som SIGSEGV Handler. Etter det tildelte jeg et 1-siders minne til den viste filstien og lagret det til innlevering av deskriptor “f”. Etter å ha kartlagt minnet, har beskrivelsen blitt lukket. Vi vil bruke variabel pekeren “M” for å få en privat kopi ved å skrive på en side. Så har vi lagt til MProtect System -samtalen for å forhindre tildeling av skrivingsrettigheter til minnet. Så har vi skrevet 1 på siden. Dette vil skrive på det tildelte minnet på siden. Utskriftserklæringen har blitt brukt til å vise fullføringsmeldingen, og MUNMAP () -metoden har blitt brukt her for å avdekke minnet som er tildelt tildelt.

La oss sammenstille og utføre denne oppdaterte koden i terminalen ved å bruke "GCC" og "./en.ut ”-kommandoer. Systemet viser at minnet er tilgang til, tildelt og ikke kartlagt på en enkelt side. "Alle fullførte!”Meldingen er vist på skjermen din.

$ ./en.ute

Konklusjon:

I denne artikkelen har vi utdypet to eksempler for å forstå arbeidet med MProtect () -systemanropet for å beskytte det tildelte minnet til en side. Eksemplene inneholder bruk av behandlerfunksjoner; Hukommelsesmap -metoder, sigaksjonsstrukturer og pekere for å oppnå de ønskede resultatene.