也就是说,你怎么知道
特定系统调用需要多少参数,
每个参数应该在哪个寄存器中,
最后每个参数的含义是什么?
有没有man
类似的命令可以告诉你?
也就是说,你怎么知道
特定系统调用需要多少参数,
每个参数应该在哪个寄存器中,
最后每个参数的含义是什么?
有没有man
类似的命令可以告诉你?
另请参阅:x86-64 上 UNIX 和 Linux 系统调用的调用约定是什么
你要找的是内核ABI,我找不到官方网站,但是有一个博客有这样的信息。
在带有 int 80h 调用的 x64 中,它是:
value storage
syscall nr rax
arg 1 rdi
arg 2 rsi
arg 3 rdx
arg 4 r10
arg 5 r9
arg 6 r8
Linux 手册页项目(当然是以 C 为中心的)
据我所知,没有关于系统调用的手册,这是你必须深入研究源代码的东西。
这个头文件很有用,因为它有许多带有参数原型的系统调用:
include/linux/syscalls.h
它包含定义,例如:
asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __user *suid);
asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __user *sgid);
asmlinkage long sys_getpgid(pid_t pid);
asmlinkage long sys_getpgrp(void);
asmlinkage long sys_getsid(pid_t pid);
asmlinkage long sys_getgroups(int gidsetsize, gid_t __user *grouplist);
arch syscalls 头文件包含其余的系统调用,一个依赖于arch:
arch/x86/include/asm/syscalls.h
(这些文件从 2.6.32 开始 - 内核的早期/更高版本可能具有不同的文件/目录名称)。
请记住,Linux 内核的内部结构经常发生变化,并且在主要内核版本之间保持稳定的 ABI 并没有付出太多努力。因此,您必须查看当前正在运行的内核的内核源代码,并且不要期望它会在任何其他内核版本上自动编译。