PTRACE -systemanrop i C

PTRACE -systemanrop i C
PTRACE () Systemanrop brukes vanligvis til feilsøking av bruddpunkter og sporingssystemanrop. PTRACE () “Process Trace” systemanrop brukes ofte til feilsøkingsformål. Det er den viktigste måten innfødte feilsøkere holder oversikt over. Spor kan pause, registre og hukommelse kan inspiseres og settes, systemanrop kan overvåkes, og til og med systemanrop kan avskjæres ved hjelp av PTRACE -systemanrop. Tracee må først kobles til sporstoffen. I en multithreaded-prosess kan hver tråd separat festes til en muligens distinkt sporstoff eller forlatt uten tilknytning og derfor ikke-debugged. Som et resultat refererer "Tracee" alltid til "en potensielt multithreaded prosess, aldri eller kanskje multithreaded prosess.

Alle signaler gitt til den sporede prosessen, bortsett fra en, får den til å stoppe, uavhengig av den registrerte signalbehandlingen, og levere en hendelse mot sporingsprosessen, som kan identifiseres ved hjelp av Wait () -systemfunksjonen. Sigkill -signalet er et unntak, ettersom det blir levert øyeblikkelig og oppnår forventet oppførsel. Det har aldri vært en standard for ptrace systemanrop. Grensesnittet er sammenlignbart på tvers av operativsystemer, spesielt når det gjelder essensiell funksjonalitet, men det skiller seg litt fra det ene systemet til det neste.

Systemanrop kan spores ved hjelp av Linux -utgaven av Ptrace. PTRACE SYSCALL -forespørselen starter på samme måte på samme måte som PTRACE fortsett. Dette bringer opp mange nye muligheter. For PTRACE PEEK -forespørsler vil PTRACE () returnere de ønskede dataene; Det vil returnere null for alle de andre forespørslene. Alle forespørsler som mislykkes retur -1, med errno satt til optimal verdi. Når det gjelder PTRACE PEEK -forespørsler, kan -1 kan være en legitim returverdi; Programmet er ansvarlig for å avgjøre om dette er en feilsituasjon eller en gyldig returverdi. Denne guiden vil forklare deg funksjonaliteten til PTRACE () systemanrop på C -språk med ett eksempel.

Eksempel for å forstå ptrace () systemanrop på C -språk

For å forstå PTRACE () systemanrop på C -språk, bruker vi Ubuntu 20.04 Linux -system for å implementere sitt eksempel. GCC Compiler er allerede installert i vårt system for utførelse av kode. Du kan installere den ved å bruke den nedenfor siterte instruksjonen i terminalskallet til Ubuntu 20.04 Linux -system.

$ sudo apt install GCC

La oss begynne med vårt eksempel. Opprett en fil med noen av dine ønskede navn med .c utvidelse i terminalen ved å bruke nano -instruksjon. Du kan direkte opprette filen ved å gå til hvilken som helst hjemmekatalog eller bruke “Touch” -kommandoen også. Hensikten med å bruke Nano -instruksjon er å åpne GNU -redaktøren direkte over terminalen. Utfør nå den nedenfor siterte instruksjonen i terminalskallet til Ubuntu 20.04 Linux -system.

$ nano q.c

Gnu Nano 4.8 vises på skjermen din. Skriv nå koden som vises i det nedenfor tilknyttede bildet.

I ovennevnte kode har vi brukt noen standardbiblioteker. PTRACE Traceme spesifiserer at foreldrene til denne prosessen skal kunne spore den. Hvis foreldrene ikke forventer å spore den, bør en prosess bare ikke sende inn denne forespørselen. PID-, addr- og dataene er ikke reservert i betraktning. Tracee er den eneste som bruker PTRACE Traceme -samtalen; Sporeren bruker bare de andre forespørslene. Foreldreprosessen gir et barns prosess og overvåker den i scenariet ovenfor. Underprosessen kjører PTRACE-funksjonen med PTRACE Traceme som den første parameteren før du påkaller Exec-funksjonen, som informerer kjernen: Barneprosessen kontrollerer deretter overordnede prosessen etter å ha ringt Execve ().

Foreldreprosessen brukte Wait () -funksjonen for å vente på kjernevarsler, og nå som den er varslet, kan den observere hva barneprosessene har gjort, for eksempel å inspisere registerverdier. Kjernen lagrer hele funksjonene i "EAX" -registeret, som fanger antallet systemanrop når systemanropet skjer. Ptrace Peekuser Les et ord fra Tracee's User -seksjonen, som inneholder prosessens registre og andre data (SYS/bruker.h>). Som en konsekvens av ptrace () samtalen blir strengen returnert. Offset må vanligvis være ordjustert, selv om dette kan variere avhengig av arkitekturen.

PTRACE CONT Resumer Tracee -prosessen hvis den er stoppet. Hvis data ikke er null, forstås det som antall signaler som skal sendes til Tracee; Deretter sendes ingen signaler. Sporingen kan for eksempel regulere om et signal sendt til Tracee overføres eller ikke. Samlingen og utførelsen kan gjøres ved å utføre de nedenfor siterte instruksjonene i terminalskallet til Ubuntu 20.04 Linux -system.

$ GCC q.c
$ ./en.ute

Den vellykkede utgangen er vist i det ovennevnte bildet.

Konklusjon

PTRACE () systemanropet har blitt mye brukt på programmeringsspråket C, men det kan identifisere og endre et løpsprogram; PTRACE -funksjonen kan virke rar. Debuggere og systemanropsporere bruker ofte denne teknikken. Hos brukerens slutt gjør det at programmerere kan gjøre mer interessante ting. Denne artikkelen ga grunnleggende forståelse og implementering av systemanropet PTRACE (). Eksempelkoden kan endres om nødvendig/