ptrace - ptrace

ptrace on järjestelmäkutsu, joka löytyy Unixista ja useista Unix-tyyppisistä käyttöjärjestelmistä . Käyttämällä ptracea (nimi on lyhenne sanasta "prosessin jäljitys") yksi prosessi voi ohjata toista, jolloin ohjain voi tarkastella ja käsitellä kohteensa sisäistä tilaa. Ptracea käyttävät virheenkorjaimet ja muut koodianalyysityökalut , lähinnä apuvälineenä ohjelmistokehitykseen.

Käyttää

Ptracea käyttävät debuggerit (kuten gdb ja dbx ), jäljitystyökalut, kuten strace ja ltrace , sekä koodin peitotyökalut . Erikoisohjelmat käyttävät ptracea myös korjaamaan käynnissä olevia ohjelmia, välttämään korjaamattomia virheitä tai poistamaan suojausominaisuuksia. Sitä voidaan käyttää edelleen hiekkalaatikkona ja ajonaikaisena ympäristösimulaattorina (kuten emuloi root-käyttöoikeus muille kuin juuriohjelmistoille).

Liittämällä toiseen prosessiin käyttämällä ptrace -kutsua työkalu hallitsee laajasti kohteensa toimintaa. Tämä sisältää sen tiedostojen kuvaajan , muistin ja rekisterien käsittelyn . Se voi yksivaiheisesti kohdekoodin läpi, voi tarkkailla ja siepata järjestelmäpuheluita ja niiden tuloksia sekä manipuloida kohteen signaalinkäsittelijöitä ja vastaanottaa ja lähettää signaaleja sen puolesta. Mahdollisuus kirjoittaa kohteen muistiin mahdollistaa sen tietovaraston muuttamisen, mutta myös sovelluksen oman koodisegmentin , jolloin ohjain voi asentaa katkaisupisteet ja korjata kohteen juoksevan koodin.

Koska kyky tarkastella ja muuttaa toista prosessia on erittäin tehokas, ptrace voi liittää vain prosesseihin, joille omistaja voi lähettää signaaleja (tyypillisesti vain omia prosessejaan); pääkäyttäjän tilin voi ptrace lähes kaikkia menetelmiä (paitsi init on ytimet ennen 2.6.26). Linux-järjestelmissä, joissa on ominaisuuksiin perustuva suojaus , ptrace-kykyä rajoittaa edelleen CAP_SYS_PTRACE-ominaisuus tai YAMA Linux Security Module . Vuonna FreeBSD , sitä rajoittaa FreeBSD vankiloissa ja Pakollinen Kulunvalvonta politiikkaa.

Rajoitukset

Viestintä ohjaimen ja kohteen välillä tapahtuu toistuvilla ptrace-puheluilla ja välittää pienen kiinteän kokoisen muistilohkon näiden kahden välillä (edellyttää kahta kontekstikytkintä puhelua kohti); tämä on akuutisti tehoton, kun päästä suuria määriä kohde muistiin, koska tämä voidaan tehdä vain sisään sanan kokoinen lohkoja (joissa on ptrace puhelun jokaista sanaa). Tästä syystä kahdeksannessa Unix -versiossa esiteltiin procfs , joka sallii sallituille prosesseille suoran pääsyn toisen prosessin muistiin - 4.4BSD seurasi, ja /procdebugger -tuen käyttö peri Solaris, BSD ja AIX, ja useimmiten Linux kopioi sen . Jotkut, kuten Solaris , ovat poistaneet ptrace -järjestelmän järjestelmäkutsuna kokonaan, säilyttäen sen kirjastokutsuna, joka tulkitsee uudelleen ptrace -kutsut uudelleen alustan prosfien kannalta. Tällaiset järjestelmät käyttävät ioctls on tiedostokuvaajan avatun /proctiedoston antaa komentoja ohjattavaan prosessiin. FreeBSD puolestaan ​​laajensi ptracea poistamaan mainitut ongelmat ja julisti procfs -ohjelman vanhentuneeksi luontaisten suunnitteluongelmiensa vuoksi.

ptrace tarjoaa vain yksinkertaisimman käyttöliittymän, jota tarvitaan virheenkorjainten ja vastaavien työkalujen tukemiseen. Sitä käyttävillä ohjelmilla on oltava perusteellinen tieto käyttöjärjestelmän ja arkkitehtuurin erityispiirteistä, mukaan lukien pinoasettelu, sovelluksen binaarinen käyttöliittymä , järjestelmäkutsumekanismi , nimen käsittely , mahdollisten virheenkorjaustietojen muoto , ja niiden on itse vastattava konekoodin ymmärtämisestä ja purkamisesta . Lisäksi ohjelmien, jotka ruiskuttavat suoritettavaa koodia kohdeprosessiin tai (kuten gdb), antavat käyttäjän syöttää komentoja, jotka suoritetaan kohteen yhteydessä, on luotava ja ladattava koodi itse, yleensä ilman ohjelmalataimen apua .

Tuki

Unix ja BSD

ptrace toteutettiin ensimmäisen kerran Version 6 Unix , ja oli läsnä sekä SVR4 ja 4.3BSD oksat Unix. ptrace on saatavana järjestelmän puhelun IRIX , Aix , NetBSD , FreeBSD , OpenBSD ja Linux . ptrace toteutetaan Solaris -kirjastokutsuna, joka perustuu Solaris -ytimen procfs -tiedostojärjestelmään; Sun toteaa, että Solariksen ptrace on tarkoitettu yhteensopivuuteen, ja suosittelee, että uudet toteutukset käyttävät rikkaampaa käyttöliittymää, joka tarjoaa Pro -tarvikkeita. UnixWaressa on myös rajoitettu ptrace, mutta kuten Sun, SCO suosittelee toteuttajia käyttämään sen sijaan taustalla olevia procfs -ominaisuuksia. HP-UX tuki ptracea julkaisuun 11i v3 (se poistettiin käytöstä ttrace , samanlainen käyttöjärjestelmäkohtainen puhelu 11i v1: ssä).

Mac käyttöjärjestelmä

Applen macOS toteuttaa myös ptrace -järjestelmän kutsuna. Applen versio lisää erityisen vaihtoehdon PT_DENY_ATTACH - jos prosessi kutsuu tämän vaihtoehdon itsekseen, myöhemmät yritykset seurata prosessia epäonnistuvat. Apple käyttää tätä ominaisuutta rajoittaakseen virheenkorjainten käyttöä ohjelmissa, jotka manipuloivat DRM -muokattua sisältöä, mukaan lukien iTunes . PT_DENY_ATTACH on myös estää DTrace kykyä valvoa prosessia. OS X: n virheenkorjaajat käyttävät tyypillisesti ptrace- ja Mach VM- ja säieliittymien yhdistelmää . ptrace (jälleen PT_DENY_ATTACH) on Apple iPhonen kehittäjien käytettävissä .

Linux

Linux antaa myös prosesseille mahdollisuuden estää muiden prosessien liittämisen niihin. Prosessit voivat kutsua prctlsyscallin ja tyhjentää PR_SET_DUMPABLElippunsa; myöhemmissä ytimissä tämä estää muita kuin juuriprosesseja jäljittämästä kutsuprosessia; OpenSSH todennusagentti käyttää tätä mekanismia estämään SSH istunnon kaappaamisen kautta ptrace. Myöhemmin Ubuntun versiot toimitetaan Linux -ytimen kanssa, joka on määritetty estämään ptrace -liitännät muista prosesseista kuin jäljitetyn prosessin vanhemmasta; tämä sallii gdb: n ja stracen jatkaa toimintaansa kohdeprosessin suorittamisen aikana, mutta estää niitä liittymästä toisiinsa liittymättömään käynnissä olevaan prosessiin. Tätä ominaisuutta ohjataan /proc/sys/kernel/yama/ptrace_scopeasetuksen kautta . Järjestelmissä, joissa tämä ominaisuus on käytössä, " gdb --attach" ja " strace -p" -komennot eivät toimi.

Vuodesta Ubuntu 10.10 , ptrace on sallittua ainoastaan kutsua lasten prosesseihin.

Android

Joissakin Android -puhelimissa, joissa käynnistyslatain on lukittu, ptracea käytetään hallitsemaan init -prosessia, jotta voidaan käynnistää toinen käynnistys ja korvata järjestelmätiedostot.

Viitteet

Ulkoiset linkit