【发布时间】:2011-09-30 01:07:24
【问题描述】:
我为radare2 调试器编写了一个Linux 系统调用映射。这意味着提供一个巨大的静态数组映射系统调用号到系统调用名称名称和它所采用的参数数量。这对 OpenBSD 来说很容易,因为系统调用号在 sys/syscall.h 中定义,并且在上面的注释中每个都是 args 的数量。只需编写一个脚本来解析它并抛出数组的 C 代码。
然而,在 linux 上,我们没有这种奢侈。从内核头文件中获取系统调用号很容易,但是我应该如何获取 args 的数量?我唯一的想法是:
1) 手动输入。对于每个拱门(它们在 linux 中的拱门之间有所不同)。所有 300 多种该死的东西。没办法!
2) 解析手册页。
3) 编写一个脚本,尝试使用 0、1、2... args 调用每个系统调用,直到程序构建。不适用于可变参数,但系统调用支持吗?
必须有更好的方法。请帮忙!
【问题讨论】:
-
有关可变参数的示例,请参阅
open()。 -
@OliverCharlesworth 你这是什么意思?
sys_open()正好有 3 个参数。 -
有一个great table in the Chromium OS docs。我建议找出他们是如何做到的。
标签: c system-calls