Ich möchte einen neuen Systemaufruf über ein LKM hinzufügen, aber ich bin mir nicht sicher, wie das geht. Das heißt, dass ich weiß, wenn ich einen komplett neuen Systemaufruf hinzufügen möchte, kann ich durch die sys_call_table einen sys_ni_syscall
suchen und ihn einfach ersetzen, aber ich war neugierig, ob es tatsächlich möglich war zu sys_call_table
hinzuzufügen. Ich realisiere, es ist wahrscheinlich nicht möglich, da es eine feste Größe Array ist, aber ich frage mich, ob es andere clevere Möglichkeiten zum Hinzufügen von Systemaufrufen ohne Überschreiben einer nicht verwendeten System-Rufnummer.Ist es möglich, einen Systemaufruf über ein LKM hinzuzufügen?
Antwort
Überprüfen Sie die Linux Documentation Project-Website für "Das Linux Kernel Modul Programming Guide" (http://www.tldp.org/LDP/lkmpg/2.6/html/index.html). Suchen Sie speziell nach Systemaufrufen: http://www.tldp.org/LDP/lkmpg/2.6/html/x978.html. Das sollte dir zumindest einen Anfang geben.
Lesen Sie das durch, obwohl es wie sys_call_table aussieht nicht mehr im Kernel 2.6 exportiert. Siehe den Kommentar in syscall.c – FreeMemory
Hier ist ein Beispiel
linux system calls
edit:
Das obige Beispiel zeigt Howto einen Systemaufruf implementieren, soweit man von einem ladbaren Modul implementiert; AFAIK, das ist nicht möglich, es sei denn, Sie überschreiben ein vorhandenes, weil die Größe des Arrays #define ist.
Bedenken Sie, dass auch Änderungen am Benutzerbereich erforderlich sind, zumindest wenn Sie den neuen Systemaufruf tatsächlich verwenden möchten.
Dies ist eine alte Frage, aber trotzdem möchte ich meine Lösung vorschlagen. Der einfachste Weg, eine "Systemanruf-ähnliche" Umgebung zu implementieren, ist, sich auf ein gefälschtes Gerät zu verlassen. Insbesondere könnten Sie einen neuen Gerätetreiber erstellen, der eigentlich nichts steuert. Wenn Sie darauf schreiben, kann das installierte Modul die erforderlichen Aktionen ausführen. Wenn Sie mehrere Dienste anbieten möchten, können Sie sie außerdem den Operationen ioctl
zuordnen.
Mögliches Duplikat von [Linux-Systemaufruf unter Verwendung von LKM implementieren] (https://stackoverflow.com/questions/12623066/implementing-linux-system-call-using-lkm) –