Как я могу получить список системных вызовов Linux и количество аргументов, которые они принимают автоматически?

Я писал карту системных вызовов Linux для отладчика radare2. Это означает предоставление огромного номера системного вызова сопоставления статических массивов имени системного вызова и количества принимаемых аргументов. Для OpenBSD это было несложно, поскольку номера системных вызовов определены в sys / syscall.h, а в комментарии над каждым из них указано количество аргументов. Просто нужно было написать сценарий, чтобы проанализировать это и выбросить код C.

Однако в Linux у нас нет такой роскоши. Номер системного вызова легко получить из заголовков ядра, но как мне узнать количество аргументов? Единственные идеи, которые у меня есть:

1) Введите их вручную. Для каждой арки (они различаются в зависимости от арки в Linux). Все 300+ проклятых вещей. Ни в коем случае!

2) Анализируйте справочные страницы.

3) Напишите сценарий, который пытается вызывать каждый системный вызов с 0, 1, 2 ... args, пока программа не соберется. Не будет работать для varargs, но поддерживают ли это системные вызовы?

Должен быть способ лучше. Пожалуйста, помогите!

18
задан Edd Barrett 6 July 2011 в 22:53
поделиться