Vad är en shim?

En shim är ett litet bibliotek som fångar upp och ändrar anrop till ett annat bibliotek, främst för att underlätta kompatibiliteten.

Det är nödvändigt att ha flera versioner av ett bibliotek för att stödja dina klienter. Shim-bibliotek översätter gamla till nya biblioteksanrop innan de skickas vidare till det nya biblioteket.

Exempel 1:

Linuxinstallationer levereras normalt med en enda Ruby-version. Ruby-utvecklare måste ha olika Ruby-versioner i sina många aktiva projekt. Rbenv använder shims för att lösa detta problem.

Att köra ett Ruby-kommando i Linux innebär att man kontrollerar om den körbara filen finns i sökvägen – som den söker från vänster till höger. Att köra Ruby-kommandot rails server innebär alltså att Linux hittar och kör Rails, en Ruby-körbar fil, i den första katalogen.

Körning av Rails-appen normalt

Rbenv lägger till en katalog shims och laddar den med shim-skript innan Path läggs till före. Det finns ett shim-skript för varje Ruby-applikation och att köra en Ruby-applikation innebär nu att köra det matchande shim-skriptet. Att köra rails innebär alltså att man kör Rails-skriptet i katalogen shims och inte Rails-applikationen i usr/local/bin. Skriptet räknar ut vilken Ruby-version som krävs och kör sedan sitt matchande program, i det här fallet Rails, under den förväntade Ruby-versionen.

Exempel 2:

Microsoft använder shims för att fejka ett programs Windows-anrop. När ett program gör ett systemanrop går det genom ”Import Address Table”.

Ett program som anropar Windows från IAT

Du kan ändra tabellen och ersätta Windows-anropet med ett anrop till en shim. Shimmet i exemplet är ett ”version-lie”-shimmet. Programmet tror att det är på en Windows 7-maskin.

Ett programanrop omdirigerat till shim från IAT

.

Lämna ett svar

Din e-postadress kommer inte publiceras.