Hallo
Ich würde gerne ein Program in C schreiben, welches Module laden kann. Kennt irgendjemand ein gutes Tutorial, wie man ein Modul-Interface und entsprechende Module schreibt?
(Bis jetzt habe ich noch nichts gefunden, so dass ich mich erstmal durch den Linux-Kernel und möglicherweise Maxima-Quellcode krame (welches, soweit ich weiß, auch Module besitzt.))
Module in C
Re: Module in C
Den Begriff "Modul" ist nur im Zusammenhang mit dem Linux-Kernel fest definiert. Er bezeichnet ein Objektcodeschnipsel, dass zur Laufzeit in den Kernel intergriert werden kann. Dieser Mechanismus funktioniert anders als das Nachladen von Objektcode im Userspace (sog. shared Libraries), und hat deshalb einen eigenen Namen bekommen.gast wrote: Ich würde gerne ein Program in C schreiben, welches Module laden kann. Kennt irgendjemand ein gutes Tutorial, wie man ein Modul-Interface und entsprechende Module schreibt?
(Bis jetzt habe ich noch nichts gefunden, so dass ich mich erstmal durch den Linux-Kernel und möglicherweise Maxima-Quellcode krame (welches, soweit ich weiß, auch Module besitzt.))
In allen anderen Zusammenhängen ist "Modul" ein frei von dir zu belegender Begriff. Deshalb hast du da auch nix zielführendes gefunden.
Meinst du vielleicht Plugins? Wenn ja, "man dlopen".
Janka
Hättest du die Manpage bis unten durchgescrollt, wüsstest du, dass dlopen das POSIX-kompabtible Interface ist.gast wrote:Gibt es auch ein POSIX-kompatibles Interface - ich würde den Code gerne auf mehreren Platformen (Linux, FreeBSD, Windows (ab W2K ist es doch POSIX-kompatible, oder?) ) laufen lassen.
Code: Select all
CONFORMING TO
POSIX 1003.1-2003 describes dlclose, dlerror, dlopen, dlsym.
MS-Windows ist *bis* NT4.0 auf dem Papier POSIX-kompatibel gewesen, danach war das nicht mehr werbewirksam (genug Unix verdrängt) und man hat das fallenlassen. Funktioniert hat es eh nie so richtig, da nur ein kleines Subset von POSIX unterstützt wurde.
Unter MS-Windows funktioniert das nachladen von Libraries auch anders. Es ist wegen der Rücksicht auf Windows95 vollkommen hirnrissig. z.B. haben DLLs ein gemeinsames Datensegment für alle Prozesse, von denen sie eingebunden werden. D.h. ein Prozess kann einen anderen über eine gemeinsame DLL fernsteuern (Ein hübsches Einfallstor für alle Arten von priviledge escalation). Für MS-Windows schreibst du am besten ein komplett neues Rahmenprogramm, und behältst nur die eigentliche Programmlogik bei -- kann man ja mittels geschickter Aufteilung des Quellcodes (z.B. in Module) leicht machen.
Janka