Estoy escribiendo un mapa de llamada del sistema Linux para el depurador radare2. Esto significa proporcionar un número de llamada de sistema de asignación de matriz estática enorme a un nombre de nombre de sistema y la cantidad de argumentos que toma. Esto fue fácil para OpenBSD ya que los números de syscall están definidos en sys/syscall.h y en un comentario arriba cada uno es el número de argumentos. Era solo una cuestión de escribir un guión para analizar esto y arrojar el código C para la matriz.¿Cómo puedo obtener una lista de las llamadas al sistema Linux y el número de argumentos que toman automáticamente?
En Linux, sin embargo, no tenemos este lujo. Es fácil obtener el número de syscall de los encabezados del kernel, pero ¿cómo debo obtener el número de args? Las únicas ideas que tengo son:
1) Tírelos manualmente. Para cada arco (varían entre arcos en linux). Todo 300+ de las malditas cosas. ¡De ninguna manera!
2) Páginas de manual de Parse.
3) Escriba un script que intente llamar a cada syscall con 0, 1, 2 ... args hasta que se construya el programa. No funcionará para varargs, pero ¿los syscalls soportan eso?
Tiene que haber una manera mejor. ¡Por favor ayuda!
Para ver un ejemplo de varargs, consulte 'open()'. –
@OliverCharlesworth, ¿qué quieres decir con esto? 'sys_open()' tiene exactamente 3 argumentos. – Ruslan