如何获取Linux系统调用列表以及它们自动执行的args数量?

Edd*_*ett 18 c system-calls

我为radare2调试器编写了一个Linux系统调用映射.这意味着为系统调用名称名称及其所需的参数数量提供一个巨大的静态数组映射系统调用号.这对于OpenBSD来说很容易,因为系统调用号在sys/syscall.h中定义,并且在上面的注释中每个都是args的数量.只需要编写一个脚本来解析它并丢弃数组的C代码.

然而,在Linux上,我们没有这种奢侈品.很容易从内核头文件中获取系统调用号,但是如何获取args的数量呢?我唯一的想法是:

1)手动输入.对于每个拱门(它们在linux中的拱门之间变化).所有300多件该死的东西.没门!

2)解析手册页.

3)编写一个脚本,尝试用0,1,2 ... args调用每个系统调用,直到程序构建.不适用于varargs,但系统调用是否支持?

一定有更好的方法.请帮忙!

Mat*_*ery 17

strace(主页)有所有这些内容的表(参见参考资料linux/<platform>/syscallent.h).源代码可在GitHub/straceGitLab/strace中获得.例如,x86_64体系结构中的系统调用列表位于此链接中.


Nem*_*emo 5

我知道的唯一列表是内核源代码,在include/linux/syscalls.h 中。但这只是名字,而不是数字;我认为您需要使用特定平台的 syscall.h 标头来获取数字。该文件中有一些#ifdefs ...