Qu’est-ce qu’un shim ?

Un shim est une petite bibliothèque qui intercepte et modifie les appels à une autre bibliothèque, principalement pour aider la compatibilité.

Maintenir plusieurs versions d’une bibliothèque est nécessaire pour supporter vos clients. Les bibliothèques de shim traduisent les appels de l’ancienne à la nouvelle bibliothèque avant de les transmettre à la nouvelle bibliothèque.

Exemple 1:

Les installations Linux sont normalement livrées avec une seule version de Ruby. Les développeurs Ruby ont besoin d’avoir différentes versions de Ruby sur leurs nombreux projets actifs. Rbenv utilise des cales pour résoudre ce problème.

L’exécution d’une commande Ruby sous Linux signifie la vérification de l’exécutable dans le chemin – qu’il recherche de gauche à droite. Ainsi, l’exécution de la commande Ruby rails server signifie que Linux trouve et exécute Rails, un exécutable Ruby, dans le premier répertoire.

Exécution normale de Rails App

Rbenv ajoute un répertoire shims et le charge avec des scripts shim avant de précéder le Path. Il existe un script shim pour chaque application Ruby et exécuter une application Ruby signifie maintenant exécuter le script shim correspondant. Ainsi, lancer rails signifie exécuter le script Rails dans le répertoire shims et non l’application Rails dans usr/local/bin. Le script calcule la version de Ruby requise et exécute ensuite son application correspondante, dans ce cas Rails, sous cette version de Ruby attendue.

Exemple 2:

Microsoft utilise des shims pour simuler les appels Windows d’une application. Lorsqu’une application fait un appel système, elle passe par la ‘table d’adresse d’importation’.

Une application appelant dans Windows depuis l’IAT

Vous pouvez modifier la table et remplacer l’appel Windows par un appel à une cale. Le shim dans l’exemple est un shim de type « version-lie ». L’application pense qu’elle est sur une machine Windows 7.

Un appel d’application redirigé vers la shim depuis l’IAT

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.