Hallo Leute Mich beschaeftigt gerade die Frage, wie Plugin- bzw. Add-on-mechanismen (wie z.B. bei Eclipse, Firefox, oder Spielen wie WoW, oder auch Malware die Module nachladen kann) funktionieren. Ich hab so auf anhieb noch nicht mal eine Vorstellung davon, wie man solch einen Mechanismus (also die Moeglichkeit des ladens eines Plugins )(Codetechnisch) umsetzen koennte. :-/ Habt Ihr da vielleicht Erfahrung (Literatur, Links etc.), um etwas Licht ins dunkel zu bringen? :-) Gruesse
Technisch können das explizit hinzugeladene DLLs sein, also DLLs, die nicht implizit im Programm referenziert werden. In Windows API gibt es Funktionen, mit denen DLLs geladen werden können und mit denen man die davon exportierten Schnittstellen erfährt. Es hängt von der Programmierumgebung ab, wie sich das dann im Programm darstellt. In unixoiden Betriebssystemen geht das mit einer "shared library" prinzipiell ähnlich.
:
Bearbeitet durch User
Ich denke Umsetzen lässt sich das relativ einfach. Bleiben wir mal bei Windows/Linux: Die Frage ist ob das mit einer eingebauten Installationsroutine (z.B. wie bei Eclipse) oder dynamisch durch einfaches Ablegen des Plugins (z.B. Gimp Filter) in einem definierten Verzeichnis funktionieren soll. Eine eingebaute Installationsroutine verteilt den Inhalt des Plugins auf die korrekten Verzeichnisse und registriert dann das Plugin in einer Tabelle(Textdatei/Registry) die das Programm verwendet um beim Start alle Plugins zu laden. Die andere Version prüft beim Start des Programms in bestimmten Verzeichnissen ob ein Plugin vorhanden ist und läd dieses dann (z.B. Gimp Filter). In beiden Fällen ist eine Versions-Checksummenprüfung sinnvoll damit dem Programm kein falsches/unpassendes/Malware Plugin untergeschoben werden kann. Die Kommunikation zwischen dem Hauptprogramm und den Plugins erfolgt nach dem Laden über vorher definierte Schnittstellen. Über die Kommunikation: http://de.wikipedia.org/wiki/Interprozesskommunikation die Doku für z.B. Firefox: https://developer.mozilla.org/en-US/docs/Building_an_Extension
Das ist prinzipiell ganz einfach einfach erklärt. Bei Plugins oder nachgeladenen Modulen musst du ja irgendeine Art Schnittstelle definieren damit du später weist welche Funktionen du aufrufen kannst. In c++ definierst du eine abstrakte Klasse in einem Header. Wenn ein Entwickler ein Plugin erstellen möchte muss er die darin enthaltenen Methoden ableiten und implementieren. Somit kann ein Programmteil Plugins laden indem er in einem Verzeichnis jede dll nach diesen Methoden testet. Windows kann dann die dll laden und dem Programm einen Zeiger darauf geben. Schon kannst du auf alle bekannten Methoden zugreifen. Eine malware macht nichts anderes.
Vielen dank fuer die Antworten. Das hilft mir schon mal etwas weiter. :)
Ich hab jetzt gefunden, wonach ich gesucht habe:
1 | Dynamic loading |
https://en.wikipedia.org/wiki/Dynamic_loading http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html Danke das Ihr mich in die richtige Richtung geschubst habt. :) Wuensche euch schoene Feiertage.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.