Hvad er en shim?

En shim er et lille bibliotek, der opfanger og ændrer kald til et andet bibliotek, primært for at fremme kompatibiliteten.

Det er nødvendigt at vedligeholde flere versioner af et bibliotek for at understøtte dine klienter. Shim-biblioteker oversætter gamle til nye biblioteksopkald, før de videresender til det nye bibliotek.

Eksempel 1:

Linux-installationer leveres normalt med en enkelt Ruby-version. Ruby-udviklere har brug for at have forskellige Ruby-versioner på deres mange aktive projekter. Rbenv bruger shims til at løse dette problem.

Afvikling af en Ruby-kommando i Linux betyder at kontrollere, om der er en eksekverbar fil i stien – som den søger fra venstre mod højre. Så hvis du kører Ruby-kommandoen rails serverbetyder det, at Linux finder og kører Rails, en Ruby-kørefil, i den første mappe.

Running Rails App Normally

Rbenv tilføjer en shims-mappe og indlæser den med shim-scripts, før Path tilføjes med et præfiks. Der er et shim-script for hver Ruby-applikation, og at køre en Ruby-applikation betyder nu at køre det tilsvarende shim-script. Så at køre rails betyder at udføre Rails-scriptet i mappen shims og ikke Rails-applikationen i usr/local/bin. Scriptet regner den krævede Ruby-version ud og kører derefter det tilsvarende program, i dette tilfælde Rails, under den forventede Ruby-version.

Eksempel 2:

Microsoft bruger shims til at forfalske et programs Windows-opkald. Når et program foretager et systemkald, går det gennem “Import Address Table”.

Et program, der kalder ind i Windows fra IAT

Du kan ændre tabellen og erstatte Windows-kaldet med et kald til en shim. Shim’en i eksemplet er en “version-lie”-shim. Programmet tror, at det er på en Windows 7-maskine.

An application call redirected to shim from IAT

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.