Mikä on shim?

Shim on pieni kirjasto, joka sieppaa ja muuttaa kutsuja toiseen kirjastoon, lähinnä yhteensopivuuden helpottamiseksi.

Kirjastojen useiden versioiden ylläpitäminen on välttämätöntä asiakkaiden tukemiseksi. Shim-kirjastot kääntävät vanhan kirjaston kutsut uudeksi kirjastokutsuksi ennen kuin ne siirtyvät uuteen kirjastoon.

Esimerkki 1:

Linux-asennuksissa on yleensä yksi Ruby-versio. Ruby-kehittäjät tarvitsevat eri Ruby-versioita monissa aktiivisissa projekteissaan. Rbenv käyttää shimejä tämän ongelman ratkaisemiseen.

Ruby-komennon suorittaminen Linuxissa tarkoittaa suoritettavan tiedoston tarkistamista polusta – jota se etsii vasemmalta oikealle. Ruby-komennon rails serversuorittaminen tarkoittaa siis sitä, että Linux etsii ja suorittaa Rubyn suoritettavan Railsin ensimmäisestä hakemistosta.

Rails-sovelluksen suorittaminen normaalisti

Rbenv lisää shims-hakemiston ja lataa siihen shim-skriptit, ennen kuin se edeltää Pathia. Jokaiselle Ruby-sovellukselle on olemassa shim-skripti, ja Ruby-sovelluksen ajaminen tarkoittaa nyt sitä vastaavan shim-skriptin ajamista. Railsin ajaminen tarkoittaa siis Rails-skriptin suorittamista hakemistossa shims eikä Rails-sovellusta hakemistossa usr/local/bin. Skripti laskee vaaditun Ruby-version ja ajaa sitten sitä vastaavan sovelluksen, tässä tapauksessa Railsin, tällä odotetulla Ruby-versiolla.

Esimerkki 2:

Microsoft käyttää shimpejä väärentääkseen sovelluksen Windows-kutsuja. Kun sovellus tekee järjestelmäkutsun, se kulkee ’Import Address Table’ -taulukon kautta.

Sovellus, joka kutsuu Windowsiin IAT:stä

Taulukkoa voi muuttaa ja Windows-kutsun voi korvata kutsulla shimiin. Esimerkin shim on ’version-lie’ shim. Sovellus luulee olevansa Windows 7 -koneessa.

Sovelluskutsu, joka ohjataan shimiin IAT:sta

.

Vastaa

Sähköpostiosoitettasi ei julkaista.