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