Właściwie, wbrew powszechnemu przekonaniu (i niektóre odpowiedzi tutaj), odpowiedź brzmi: tak, można, ale w zależności od której OS:
W Linuksie można nazwać niemal wszystkie wywołania systemowe, jeśli możesz znaleźć eksport ich jądra (wykonaj "cat/proc/kallsysms | grep sys_" dla przykładu). Istnieje niewielka "sztuczka", aby obejść ochronę w większości systemów (tych, które akceptują tryb użytkownika *), ustawiając segment danych (KERNEL_DS). Nie jest to dokładnie zalecane, ale z pewnością ma sens, jeśli potrzebujesz dostępu do plików z jądra (np. SELinux).
W systemie Windows większość połączeń Nt * w jądrze jest również dostępna jako wywołania Zw * - wykonaj "dumpbin/exports C: \ windows \ system32 \ ntoskrnl.exe | findstr Zw (lub Nt)" dla przykład.
W systemie Mac OS X technicznie nie powinno być dozwolone, chociaż istnieją sprytne hacki, aby ominąć to.
Choć wywołania systemowe są rzeczywiście interfejs pomiędzy trybem użytkownika i jądra, są zaskakująco sporo przypadków, w których produkcja nawet godne kod robi to - ale poprzez staranne przestrzeganie zastrzeżeniami.
Nie, nie możesz. Wywołanie systemowe jest z definicji interfejsem między jądrem a krajem użytkownika –
Wiedziałem. To, co robimy, nazywa się pomocnikiem lub innymi funkcjami. Jestem ciekawa, czy możemy to zrobić, czy nie. – liuyruc
A wywołanie systemowe jest prawdopodobnie także punktem planowania; więc nie chcesz wywoływać jego funkcji w dowolnym punkcie jądra. Ogólnie, kodowanie jądra jest bardzo trudne. Powinieneś wyjaśnić znacznie więcej, co i dlaczego chcesz to zrobić ... –