那就是,你怎么知道
特定系统调用所需的参数数量,
注册每个参数应该在,
最后每个参数意味着什么?
是否有man
相似的命令告诉你?
答案 0 :(得分:3)
另见:What are the calling conventions for UNIX & Linux system calls on x86-64
你要找的是内核ABI,我找不到官方网站,但a blog有这样的信息。
在带有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
答案 1 :(得分:2)
Linux man-pages project(当然以C为中心)
答案 2 :(得分:1)
我知道没有系统调用的手册,你需要深入研究源代码。
这个头文件很有用,因为它有很多带有参数原型的系统调用:
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并没有花费太多精力。因此,您必须查看当前正在运行的内核的内核源代码,并且不要指望它在任何其他内核版本上自动编译。