Module in C

Post Reply
Message
Author
gast

Module in C

#1 Post by gast »

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 Post by Marco Gerber »

tach

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

greetz by
Marco

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

Re: Module in C

#3 Post by Janka »

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.))
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 Post by gast »

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

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#5 Post by Janka »

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

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

Post Reply