Wat is een shim?

Een shim is een kleine bibliotheek die aanroepen naar een andere bibliotheek onderschept en wijzigt, voornamelijk om compatibiliteit te bevorderen.

Het onderhouden van meerdere versies van een bibliotheek is noodzakelijk om uw klanten te ondersteunen. Shim bibliotheken vertalen oude naar nieuwe library calls alvorens door te sturen naar de nieuwe library.

Voorbeeld 1:

Linux installaties worden normaal geleverd met een enkele Ruby versie. Ruby ontwikkelaars moeten verschillende Ruby versies hebben op hun vele actieve projecten. Rbenv gebruikt shims om dit probleem op te lossen.

Het uitvoeren van een Ruby commando in Linux betekent controleren op de executable in het pad – dat het van links naar rechts doorzoekt. Dus, het uitvoeren van het Ruby commando rails server betekent dat Linux Rails, een Ruby executable, vindt en uitvoert in de eerste directory.

Running Rails App Normally

Rbenv voegt een shims directory toe en laadt deze met shim scripts voordat het Path wordt voorgeprogrammeerd. Er is een shim script voor elke Ruby applicatie en het draaien van een Ruby applicatie betekent nu het draaien van het bijbehorende shim script. Dus, het draaien van rails betekent het uitvoeren van het Rails script in de shims directory en niet de Rails applicatie in usr/local/bin. Het script berekent de vereiste Ruby-versie en voert vervolgens de bijbehorende applicatie uit, in dit geval Rails, onder die verwachte Ruby-versie.

Example 2:

Microsoft gebruikt shims om de Windows-aanroepen van een applicatie te vervalsen. Wanneer een toepassing een systeem aanroept, gaat deze door de ‘Import Address Table’.

Een toepassing die Windows aanroept vanuit IAT

U kunt de tabel wijzigen en de Windows-aanroep vervangen door een aanroep naar een shim. De shim in het voorbeeld is een ‘versie-lie’ shim. De toepassing denkt dat deze zich op een Windows 7-machine bevindt.

Een toepassingsoproep omgeleid naar een shim van IAT

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.