Was macht rebaseall in Cygwin?

10

Wenn ich dll / forking-Fehler in Cygwin eingebe, rufe ich das Skript rebaseall an und alles funktioniert auf magische Weise wieder. Ich weiß, dass es die DLLs in der Cygwin-Installation irgendwie verändert, weil ich einen Unterschied zwischen den problematischen und den reflagierten gemacht habe.

Was ändert es genau in diesen Binärdateien und lässt sie wieder arbeiten?

    
Fr0stBit 14.10.2015, 12:51
quelle

1 Antwort

11

Laut Fehlermeldungen zu Modulbasisadressen :

  

DLLs unter Windows müssen in den Speicher bei nicht in Konflikt stehenden Basisadressen geladen werden. rebaseall ist ein Cygwin-Dienstprogramm, das alle derzeit installierten Bibliotheken durchsucht und jeweils eine andere Basisadresse anfordert, sodass keine Konflikte auftreten.

Ein bisschen mehr technische Erklärung von Behandlung wiederholter Fehler von Rebaseall, um cygwin-Remaps zu erlauben :

  

Wegen der Unix-Fork-Semantik (vermutlich) müssen Cygwin-Bibliotheken an der gleichen Stelle in Eltern und Kind eines Forks gemappt werden. Alle Cygwin-Bibliotheken haben Hinweise darauf, wo sie in einem Prozessadressraum abgebildet werden sollten; Wenn diese Hinweise befolgt werden, wird jede Bibliothek in beiden Adressräumen an derselben Stelle zugeordnet. Windows ist jedoch glücklich, eine DLL irgendwo im Adressraum abzubilden. der Hinweis wird nicht als kontrollierend angesehen. Der Neuzuordnungsfehler tritt auf, wenn ein Cygwin-Prozess gestartet wird und eine seiner Bibliotheken nicht dem durch den Hinweis angegebenen Speicherort zugeordnet werden kann.

     

/ usr / bin / rebaseall ändert die DLL-Hinweise für alle cygwin-Bibliotheken, so dass keine Konflikte zwischen den Bibliotheken auftreten; Dazu wählt man ein zusammenhängendes, aber nicht überlappendes Bibliothekslayout, das an einer Basisadresse beginnt und arbeitet. Dieser Prozess stellt sicher, dass es keine Intra-Cygwin-Konflikte gibt, kann aber nicht mit Konflikten mit externen DLLs umgehen, die sich in den Adressräumen des Cygwin-Prozesses befinden (z. B. Antivirus-DLLs).

    
pak 15.10.2015, 02:06
quelle

Tags und Links