Module in C

Antworten
Nachricht
Autor
gast

Module in C

#1 Beitrag von gast » 20. Mär 2006 11:55

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.))

Marco Gerber

#2 Beitrag von Marco Gerber » 21. Mär 2006 13:49

tach

Der beste Weg, zu verstehen wie Module in den Kernel geladen werden, ist der ueber die Sourcen von modutils.

greetz by
Marco

Benutzeravatar
Janka
Beiträge: 3573
Registriert: 11. Feb 2006 19:10

Re: Module in C

#3 Beitrag von Janka » 21. Mär 2006 15:03

gast hat geschrieben: 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.))
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.

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

gast

#4 Beitrag von gast » 22. Mär 2006 8:15

@Janka

Besten Dank; das ist im Wesentlichen das, was ich suche. 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.

Benutzeravatar
Janka
Beiträge: 3573
Registriert: 11. Feb 2006 19:10

#5 Beitrag von Janka » 22. Mär 2006 9:59

gast hat geschrieben: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.
Hättest du die Manpage bis unten durchgescrollt, wüsstest du, dass dlopen das POSIX-kompabtible Interface ist.

Code: Alles auswählen

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

Antworten