Mi az a shim?

A shim egy kis könyvtár, amely elkapja és megváltoztatja egy másik könyvtár hívásait, főként a kompatibilitás elősegítése érdekében.

A kliensek támogatásához szükséges egy könyvtár több verziójának fenntartása. A shim könyvtárak lefordítják a régi könyvtári hívásokat az új könyvtári hívásokra, mielőtt továbbküldik az új könyvtárba.

1. példa:

A Linux telepítések általában egyetlen Ruby verzióval érkeznek. A Ruby fejlesztőknek különböző Ruby verziókra van szükségük a sok aktív projektjükben. Az Rbenv shimeket használ ennek a problémának a megoldására.

A Ruby parancs futtatása Linuxban azt jelenti, hogy az útvonalban ellenőrzi a futtathatót – amit balról jobbra haladva keres. Tehát a Ruby parancs rails serverfuttatása azt jelenti, hogy a Linux megtalálja és futtatja a Rails-t, egy Ruby futtatható programot az első könyvtárban.

Rails alkalmazás normál futtatása

Rbenv hozzáad egy shims könyvtárat, és betölti azt shim szkriptekkel, mielőtt a Path-ot előtagolja. Minden Ruby alkalmazáshoz van egy shim szkript, és egy Ruby alkalmazás futtatása mostantól a megfelelő shim szkript futtatását jelenti. Tehát a rails futtatása a shims könyvtárban lévő Rails szkript futtatását jelenti, nem pedig a usr/local/bin könyvtárban lévő Rails alkalmazást. A szkript kiszámítja a szükséges Ruby-verziót, majd a hozzá tartozó alkalmazást, jelen esetben a Rails-t, az elvárt Ruby-verzió alatt futtatja.

Példa 2:

A Microsoft shimeket használ az alkalmazás Windows-hívásainak meghamisítására. Amikor egy alkalmazás rendszerhívást hajt végre, az az “Import Address Table”-en keresztül történik.

A Windowsba az IAT-ból hívó alkalmazás

Megváltoztathatja a táblázatot, és a Windows-hívást egy shim hívásával helyettesítheti. A példában szereplő shim egy ‘version-lie’ shim. Az alkalmazás azt hiszi, hogy egy Windows 7-es gépen van.

Az IAT-ból

shimre átirányított alkalmazáshívás.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.