在glibc中实现Syscall

时间:2015-10-19 17:44:06

标签: 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开发人员)所以我不明白这里的语法。

我的问题如下:

  1. 我可以在括号中的参数列表之后编写函数参数声明,如下所示:

    void foo(bar) long int bar; { //功能代码 }

  2. 如何在glibc中找到syscalls汇编程序中的实际实现? (不需要是正确的位置,任何提示都表示赞赏)

1 个答案:

答案 0 :(得分:1)

通过glibc不仅仅在源代码中定义了Syscalls。 Glibc通过这个shell脚本动态地为syscalls创建语法:/sysdeps/unix/make-syscalls.sh。该脚本使用适用于相关操作系统的syscalls.list文件。此外,还有一些关于体系结构的文件,用于确定用于捕获内核的正确操作码。例如。 X86_64将“syscall”定义为跳转到内核的操作码(参见the sysdep.h for X86_64)。