Я пишу карту системных вызовов Linux для отладчика radare2.Это означает предоставление системного номера огромного статического сопоставления массива имени имени системного вызова и количеству аргументов, которые оно принимает.Это было легко для OpenBSD, так как числа syscall определены в sys / syscall.h, а в комментариях над каждым указано количество аргументов.Это был всего лишь вопрос написания сценария для его анализа и выброса кода C для массива.
Однако в Linux у нас нет такой роскоши.Легко получить номер системного вызова из заголовков ядра, но как мне получить количество аргументов?Единственные идеи, которые у меня есть:
1) Введите их вручную.Для каждой арки (они различаются между арками в Linux).Все 300+ проклятых вещей.Ни в коем случае!
2) Разбор страниц справочника.
3) Напишите скрипт, который пытается вызвать каждый системный вызов с 0, 1, 2 ... args до сборки программы.Не подойдет ли varargs, но поддерживают ли это системные вызовы?
Должен быть лучший способ.Пожалуйста, помогите!