2017-05-11 5 views
1

Ich weiß, dass es das RTLD_LOCAL-Flag gibt, das verhindert, dass Symbole aus der geladenen Bibliothek in den globalen Gültigkeitsbereich gelangen. Das Problem besteht jedoch darin, dass es keine Möglichkeit gibt, zu verhindern, dass die geladene Bibliothek dlopen mit RTLD_GLOBAL aufruft und Symbole in den globalen Bereich einfügt.Verhindern, dass die DLL-Bibliothek Symbole überschreibt

Gibt es eine Möglichkeit, dies zu verhindern?

Antwort

1

Aber das Problem ist, es gibt keinen Weg, um die geladene Bibliothek zu verhindern, um dann mit RTLD_GLOBAL nennen dlopen, also Symbole auf den globalen Bereich eingesetzt wird.

Eine Bibliothek, die Code in Ihrem Prozess ausgeführt wird, kann eine Million Dinge tun: es könnte Ihr Haufen korrupt, Patch ausführbaren Text, außer Kraft setzen Ihre bereits aufgelöst und noch GOT Einträge nicht ungelöst, leiten Ihre offenen Dateideskriptoren verschiedene Dateien oder Steckdosen usw. etc.

Bedenken, dass es dlopen etwas ist, ist ein bisschen sinnlos. Wenn Sie es wirklich von Ihrem Prozess isolieren möchten, führen Sie es in einem anderen Prozess aus.

Aber wenn Sie aus irgendeinem Grund nur Sorge um dlopen und nichts anderes diese Bibliothek tun könnte, könnten Sie diese Bibliothek dlopenGOT Eintrag, und setzen Sie ihn auf my_dlopen, die entweder immer wieder NULL oder löscht das RTLD_GLOBAL Bit finden vor dem Aufruf der realen dlopen.

Verwandte Themen