Pinokehys

Pinokehys ( englanninkielisestä  stack frame ) - mekanismi argumenttien välittämiseksi ja väliaikaisen muistin varaamiseksi (korkean tason ohjelmointikielten menettelyissä) järjestelmäpinon avulla .

Tekniikka

Tyypillisesti järjestelmäpinoa käytetään palautusosoitteiden tallentamiseen alirutiineja kutsuttaessa sekä prosessorin rekisteriarvojen tallentamiseen/palauttamiseen.

Argumenttien välittäminen

Kun proseduuria kutsutaan, argumentit työnnetään pinoon ennen aliohjelman kutsumista. Siten menettely vastaanottaa pinon, jonka yläosassa on paluuosoite ja sen alapuolella - argumentit, joilla sitä kutsuttiin.

Proseduurista palatessa (tai sen jälkeen, katso alla), argumentit on pompattava pinosta.

Väliaikainen muistin varaus

Jos pinoosoitin siirretään "korkeammaksi" (pinon kasvattamisen suuntaan), osa pinon muistista jää käyttämättä (mukaan lukien kolmatta proseduuria kutsuttaessa) ja proseduuri voi käyttää sitä harkintansa mukaan, ylöspäin siihen hetkeen, kun se palaa menettelyyn, joka kutsui sen. Siten korkean tason kielet järjestävät muuttujia, jotka ovat olemassa vain menettelyssä (C-kieli kutsuu niitä "automaattisiksi").

Ennen paluuta toimenpiteen on palautettava pinoosoitin alkuperäiseen paikkaansa (eli palautusosoitteeseen).

Sopimukset eri ohjelmointikielille

Erilaiset korkean tason kielten kääntäjät lähestyvät pinokehyksen järjestämistä eri tavoin riippuen laitteistoalustan ominaisuuksista ja tietyn kielen standardeista. Tärkeimmät erot liittyvät järjestykseen, jossa argumentit välitetään pinoon ja milloin ne ponnataan pinosta palautuksen yhteydessä.

Pinokehyksen haitat

Pinokehys on kätevä tekniikka tilapäisen muistin varaamiseen mielivaltaisen määrän argumentteja välittämiseksi tai sisäiseen käyttöön. Sillä on kuitenkin useita haittoja.

Suorituskyky

Tietojen siirtäminen muistin läpi hidastaa tarpeettomasti ohjelman suorittamista (verrattuna assembly-kielisiin ohjelmiin , joissa suurin osa argumenteista ja väliaikaisesta tiedosta sijoitetaan prosessorin rekistereihin).

Paikallisten muuttujien pääsyn vähentämiseksi ohjelma on optimoitu kääntämisen yhteydessä käyttämään rekistereitä muuttujien sijasta muistissa tai tallentamaan niiden väliarvoja.

Jotkut kielet käyttävät kutsukäytäntöjä, jotka tukevat kokonaislukuargumenttien välittämistä rekistereiden kautta.

Turvallisuus

Pinokehys limittää sovellustiedot kriittisten tietojen kanssa – osoittimien, rekisteriarvojen ja palautusosoitteiden kanssa. Tämä yhdistettynä joidenkin prosessorien arkkitehtuuriin (eli pinon kasvun suuntaan) tekee kriittisten tietojen haitallisesta ylivuodon puskurin ylivuodon vuoksi erittäin helpoksi saavuttaa (ohjelmassa on tietysti ensin oltava bugi, joka sallii ylivuodon esiintyä).

Tällaisella "epäonnistuneella" puskurin ylivuodon kannalta konepinon kasvusuunnassa on laitteistoalustoja: X86 .

Pinopuskurin ylivuotohyökkäys toteutetaan yleensä seuraavasti:

Katso myös