Ohne in die Details von warum zu gehen, suche ich nach einer sauberen (wie möglich) Möglichkeit, Kernel-Funktionen und Systemaufrufe von einem ladbaren Modul zu ersetzen. Meine ursprüngliche Idee war, etwas Code zu schreiben, um einige Funktionen zu überschreiben, die die ursprüngliche Funktion übernehmen würden (vielleicht, wenn möglich, Anruf die Funktion), und fügen Sie dann etwas von meinem eigenen Code hinzu. Der Schlüssel ist, dass die Funktion, die ich schreibe, den Namen der ursprünglichen Funktion haben muss, so dass anderer Code auf meinen zugreift, wenn er versucht, darauf zuzugreifen.Überschreiben der Funktionalität mit Modulen im Linux-Kernel
Ich kann leicht (vergleichsweise) dies direkt im Kernel tun, indem ich einfach meinen Code in die entsprechenden Funktionen werfe, aber ich fragte mich, ob jemand etwas C-Magie kannte, die nicht notwendig ist schrecklichen Kernel (oder C) Kodierungspraxis, die das gleiche Ergebnis erzielen könnte.
Gedanken von #defines und typedefs kommen mir in den Sinn, aber ich kann es nicht in meinem Kopf hacken.
Kurz gesagt: Kennt jemand eine Möglichkeit, Funktionen im Linux-Kernel (von einem Modul) effektiv zu überschreiben?
EDIT: Da es gefragt worden, ich bestimmte Funktionen (Erstellen/Löschen von Verzeichnissen, etc.) aus dem Kernel, aber für geistige Gesundheit willen, ein ladbares Modul scheint Sinn zu machen, anstatt im Wesentlichen protokollieren will um einen großen Patch in den Kernel-Code zu schreiben und bei jeder Änderung neu zu kompilieren. Ein minimaler addierter Code zum Kernel ist in Ordnung, aber ich möchte den Großteil der Arbeit auf ein Modul abladen.
Können Sie klären, welche dieser drei Sie zu tun versuchen: 1) außer Kraft setzen ruft Funktionen auf Kernel aus vorhandenen Kernel-Code 2) außer Kraft setzen Funktionen von Ihrem Kernel-Modul auf Kernel ruft 3) Override Systemaufrufe in Userspace, die in den Kernel anrufen Außer es # 1, würde ich #defines – bmdhacks
1 und 2 empfehlen? Ich möchte die Aufrufe im Kernel selbst intakt machen, nur die Funktionen, die aufgerufen werden (im Kernel) sollen durch Funktionen ersetzt werden, die in meinem Modul definiert sind. Wenn das * irgend * Sinn macht. –
Nicht wirklich, es würde wahrscheinlich helfen, wenn Sie den "Warum" -Teil erklären würden. –