我目前正在尝试通过C中的内联汇编程序在我的Linux X64上进行系统调用。由于我的方法都不起作用,我想弄清楚,如何在glibc中完成。我在/misc/syscall.c中找到了以下内容
long int
syscall (callno)
long int callno;
{
__set_errno (ENOSYS);
return -1;
}
我不得不说我是C的新手(我是Java开发人员)所以我不明白这里的语法。
我的问题如下:
我可以在括号中的参数列表之后编写函数参数声明,如下所示:
void foo(bar) long int bar; { //功能代码 }
如何在glibc中找到syscalls汇编程序中的实际实现? (不需要是正确的位置,任何提示都表示赞赏)
答案 0 :(得分:1)
通过glibc不仅仅在源代码中定义了Syscalls。 Glibc通过这个shell脚本动态地为syscalls创建语法:/sysdeps/unix/make-syscalls.sh。该脚本使用适用于相关操作系统的syscalls.list文件。此外,还有一些关于体系结构的文件,用于确定用于捕获内核的正确操作码。例如。 X86_64将“syscall”定义为跳转到内核的操作码(参见the sysdep.h for X86_64)。