Que fait rebaseall à Cygwin?

en cas d'erreur dll/bifurcation à cygwin, j'appelle le script rebaseall et tout fonctionne à nouveau comme par magie. Je sais que cela modifie d'une manière ou d'une autre les dlls de l'installation cygwin parce que j'ai fait une différence entre les problématiques et les rebasées.

Qu'est-ce qu'il modifie exactement dans ces fichiers binaires et les fait fonctionner à nouveau?

12
demandé sur Fr0stBit 2015-10-14 15:51:59

1 réponses

selon messages d'erreur concernant les adresses de base des modules :

DLLs sur Windows doit être chargé en mémoire aux adresses de base non-conflictuelles. rebaseall est un utilitaire cygwin qui scanne toutes les bibliothèques actuellement installées et définit chacune pour demander une adresse de base différente afin qu'aucune ne soit en conflit.

un peu plus d'explication technique de Gérer les défaillances répétées de rebaseall pour permettre à cygwin remaps :

en raison de la sémantique de fourche unix (probablement), les bibliothèques cygwin doivent être cartographiées au même endroit dans les deux parent et enfant d'une fourche. Toutes les bibliothèques cygwin ont des indices pour indiquer où elles doivent être cartographiées dans un espace d'adresse de processus; si ces indices sont suivis, chaque bibliothèque sera cartographiée au même endroit dans les deux espaces d'adresse. Cependant, Windows est parfaitement heureux mapping une DLL n'importe où dans le espace d'adresse; l'indication n'est pas considérée comme contrôlant. L'erreur de remappage se produit lorsqu'un processus cygwin démarre et qu'une de ses bibliothèques ne peut pas être mappée à l'emplacement spécifié par son indice.

/usr/bin / rebaseall change les conseils DLL pour toutes les bibliothèques cygwin de sorte qu'il n'y a pas de conflits entre les bibliothèques; il le fait en choisissant un plan de bibliothèque contigu mais ne se chevauchant pas à partir d'une adresse de base et en travaillant vers le bas. Ce processus permet de s'assurer de l'absence de conflits intra-cygwin, mais ne peut pas traiter les conflits avec les DLLs externes qui sont dans les espaces d'adresse de processus de cygwin (par exemple, anti-virus DLLs).

15
répondu pak 2015-10-15 02:06:15