如何在不使用SYSCALL(__ NR_MYSYSSCALL)的情况下调用函数ID新添加的系统调用



我正在使用ubuntu 10.04中的linux-3.9.3内核。我在Linux-3.9.3源树的内核目录中添加了一个基本的系统调用。我能够通过将我的新系统调用号码作为参数传递给syscall()。但是我想通过使用其方法名称直接调用它,例如getpid()open()系统调用。任何人都可以帮助我将其添加到GNU C库中。我经历了几个文件,但对如何完成该文件没有任何清楚的想法。

谢谢!!!

假设您在64位Linux X86-64上,则相关的ABI是X86-64 ABI。另请阅读X86调用惯例Wikipage和Linux组件HOWTO和SYSCALLS(2)

因此,syscalls使用的惯例与普通函数调用不同(例如,所有参数均由寄存器传递,错误条件可以使用随身携带的位)。因此,您需要一个C包装器才能使您的SYSCALL可用于C应用程序。

您可以查看现有C库的源代码,例如GNU LIBC或MUSL LIBC(因此,您需要为SYSCALL制作自己的库)。 musl libc 源代码非常可读,例如它的src/unistd/fsync.c为例。

我建议在不修补libc的情况下将您的新Syscall包裹在您自己的库中。请注意,一些罕见的syscall坐在另一个图书馆中,例如request_key(2)在libkeyutils

中具有其C包装器

相关内容

  • 没有找到相关文章

最新更新