Linux Mechanismen
Shared Libaries/shared Object
Literatur:
- Program Library HOWTO insbesondere Programming library HOWTO
- C++ dlopen mini HOWTO
- beschreibt Lösungen bei der Verwendung von C++ mit dlopen
- siehe Dynamischer Linker ld.so(8)
LD_LIBRARY_PATH-Environment-Variable setzt Suchpfad.
Nach der
Bemerkungen von David B. ist dies nur für Experimentierzwecke, bei der Endnutzung ist es nicht akzeptabel, daß Programme nur mit Hilfe des richtig LD_LIBRARY_PATHs - der auch noch von der Tageslaune des Installateurs abhängt startbar sind.
Tips:
- bei ld kann man mit -static eine Programmdatei explizit statisch linken.
- ldd(8) listet auf, welche shared library eingezogen werden
- debugging:
export LD_DEBUG=all
export LD_DEBUG_OUTPUT=/tmp/ld_out
- Erzeugen von shared Libraries
gcc -fPIC -c hurz.c
gcc -shared -Wl,-soname,your_soname -o library_name file_list library_list
-fPIC bedeutet position independent code.
- setzen des RPATHs:
-Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
Funktion:
- ELF-Format hat attribut DT_RUNPATH
- /etc/ld.so.conf listet alle Verzeichnisse
- ldconfig(8) generiert u.a. Cache /etc/ld.so.cache.
- vermutlich Tabelle symbol - Libarary. Zusätzlich werden Links auf die Aktuelleste Bibliothek gemacht.
- Versionierung ist inbegriffen: so.higher.lower - soname-Flag setzt Namen
Sicherheitsprobleme und Vermeidung:
- Bei suid-Programmen wird der LD_LIBRARY_PATH aus dem Environment
geloescht.
LD_PRELOAD
Der Environmentvariable LD_PRELOAD kann man Funktionsaufrufe unterbrechen:
- testLD_PRELOAD.tgz
- baut eine shared library und einen interceptor. test.sh ist der Aufruf
- testLD_PRELOAD.tgz
- überschreibt den open-Systemcall in der libc.
weitere Literatur:
Kevin Pulo: Fun with LD_PRELOAD
Beispielanwendungen die referenziert werden:
- FL-Cow
- überschreibt open und realisiert ein Copy on Write
- installwatch
- prüft Modifikationen bei installationen
- netjail
- kontrolliert wie programme auf netz zugreifen
- failmalloc
- überschreibt malloc und laesst es oft NULL zurueckgeben um die robustheit zu testen
- Electicfence
-
- überprüft malloc-Aufrufe
- segv_handler
-
Umlinken: Erzeugen eines statischen Executable aus einem dynamisch gelinkten Executable
Problematik: das dynamische Linken bringt zur Laufzeit viele Abhängigkeiten, die in einer konkreten Installation vorliegen müssen.
- ELF Statifier
- Ermine
-
kommerzielle Lösung
Informatik- und Netzwerkverein Ravensburg e.V Rudolf Weber