Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
glibc中系统调用的实现_C_Linux_System Calls_Glibc_Libc - Fatal编程技术网

glibc中系统调用的实现

glibc中系统调用的实现,c,linux,system-calls,glibc,libc,C,Linux,System Calls,Glibc,Libc,我目前正试图通过C语言中的内联汇编程序在我的Linux X64上实现一个系统调用。由于我的方法都不起作用,我想弄清楚,这是如何在glibc中实现的。我在/misc/syscall.c中找到了以下内容 long int syscall (callno) long int callno; { __set_errno (ENOSYS); return -1; } 我必须说我是C语言的新手(我是Java开发人员),所以我不理解这里的语法 我的问题如下: 我可以在括号中的参数列表之后写

我目前正试图通过C语言中的内联汇编程序在我的Linux X64上实现一个系统调用。由于我的方法都不起作用,我想弄清楚,这是如何在glibc中实现的。我在/misc/syscall.c中找到了以下内容

long int
syscall (callno)
     long int callno;
{
  __set_errno (ENOSYS);
  return -1;
}
我必须说我是C语言的新手(我是Java开发人员),所以我不理解这里的语法

我的问题如下:

  • 我可以在括号中的参数列表之后写函数参数声明,这样是否正确:

    无效foo(bar) 长整型条; { //功能代码 }

  • 如何在glibc中找到系统调用在汇编程序中的实际实现?(不需要是正确的位置,任何提示都值得欣赏)


  • 系统调用不是glibc在源代码中单独定义的。Glibc通过以下shell脚本动态创建系统调用的语法:。该脚本使用适用于相关操作系统的syscalls.list文件。此外,还有一些关于体系结构的文件,用于确定捕获到内核的正确操作码。例如,X86_64将“syscall”定义为跳转到内核的操作码(请参阅)。

    您的第一个问题:1。是的,但这是不赞成的。它在K&R第一版中使用。请注意,使用了现代参数声明。对于Q.2,这可能有助于oyu