你在哪里检查x86-64机器上系统调用的原型?

new*_*erl 6 linux assembly x86-64 system-calls abi

那就是你怎么知道的

特定系统调用所需的参数数量,

注册每个参数应该在,

最后每个参数意味着什么?

是否有man相似的命令告诉你?

Cor*_*son 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);
Run Code Online (Sandbox Code Playgroud)

arch 系统调用头文件包含其余的系统调用,其中一个与 arch 相关:

arch/x86/include/asm/syscalls.h

(这些文件自 2.6.32 起 - 早期/更高版本的内核可能具有不同的文件/目录名称)。

请记住,Linux 内核的内部结构经常发生变化,并且没有投入大量精力来保持主要内核版本之间的稳定 ABI。因此,您必须查看当前正在运行的内核的内核源代码,并且不要指望它能够在任何其他内核版本上自动编译。