Eigentlich entgegen der landläufigen Meinung (und einige Antworten hier), ist die Antwort, ja, können Sie, aber je nachdem, welches Betriebssystem:
Unter Linux können Sie fast alle Systemaufruf ruft, wenn Sie können ihren Kernel-Export finden (für ein Beispiel "cat/proc/kallsysms | grep sys_"). Es gibt einen kleinen "Trick", um einen Schutz in den meisten Systemaufrufen (die einen Benutzermodus * akzeptieren) zu umgehen, indem Sie das Datensegment (KERNEL_DS) einstellen. Es wird nicht genau empfohlen, macht aber Sinn, wenn Sie auf Dateien aus dem Kernel zugreifen müssen (z. B. SELinux).
In Windows sind die meisten Nt * Aufrufe im Kernel auch als Zw * Aufrufe verfügbar - machen Sie "dumpbin/exportiert C: \ windows \ system32 \ ntoskrnl.exe | findstr Zw (oder Nt)" für ein Beispiel.
In Mac OS X sollte es technisch nicht erlaubt sein, obwohl es clevere Hacks gibt, um es zu umgehen.
Obwohl Systemaufrufe sind in der Tat die Schnittstelle zwischen Benutzermodus und den Kernel gibt es überraschend nicht wenige Fälle, in denen sogar die Produktion würdigen Code tut so - aber durch sorgfältige Beachtung der Einschränkungen.
Nein, du kannst nicht. Ein Systemaufruf ist definitionsgemäß die Schnittstelle zwischen Kernel und Userland –
, die ich kannte. Was wir tun, nennt man den Helfer oder andere Funktionen. Ich bin nur neugierig, können wir es schaffen oder nicht. – liuyruc
Und ein Systemaufruf ist wahrscheinlich auch ein Zeitplan; Sie möchten also seine Funktion nicht an einem beliebigen Punkt im Kernel aufrufen. Im Allgemeinen ist die Kernel-Codierung sehr schwierig. Sie sollten viel mehr erklären, was und warum Sie das tun wollen ... –