una tipos systemcall sobre sistema seguridad proteccion pasos para operativo llamadas llamada las implementación finalidad existen cuántos cuál conexiones archivos administración c system-calls

tipos - ¿Cómo puedo obtener una lista de llamadas al sistema Linux y la cantidad de argumentos que toman automáticamente?



pasos de una llamada al sistema (6)

Análisis de la documentación:

http://asm.sourceforge.net/syscall.html Analizar el HTML dentro de las etiquetas <pre> .

o

http://syscalls.kernelgrok.com/ Convierta JSON http://syscalls.kernelgrok.com/syscalls-2.6.35.4.js

Escribo un mapa de llamadas al sistema Linux para el depurador radare2. Esto significa proporcionar un gran número de llamadas al sistema de asignación de matriz estática a un nombre de syscall y la cantidad de argumentos que toma. Esto fue fácil para OpenBSD ya que los números de syscall se definen en sys / syscall.h y en un comentario sobre cada uno está el número de argumentos. Era solo una cuestión de escribir un script para analizar esto y tirar el código C para la matriz.

En linux sin embargo, no tenemos este lujo. Es fácil obtener el número de syscall de los encabezados del núcleo, pero ¿cómo debo obtener el número de argumentos? Las únicas ideas que tengo son:

1) Escríbalos manualmente. Para todos y cada uno de los arcos (varían entre arcos en linux). Los más de 300 de las malditas cosas. ¡De ninguna manera!

2) Analizar páginas de manual.

3) Escriba un script que intente llamar a cada syscall con 0, 1, 2 ... args hasta que se genere el programa. ¿No funcionará para varargs, pero son compatibles con syscalls?

Tiene que haber una mejor manera. ¡Por favor ayuda!


Hay llamadas al sistema con un número variable de argumentos: sea testigo de la llamada open() en el nivel C, donde el tercer parámetro es opcional (puede que no sea opcional en el nivel del ensamblador).

Su mejor opción podría ser encontrar las llamadas al sistema identificadas por su nombre en syscalls.h en la fuente (preprocesada) de los otros encabezados del sistema. De esos, puedes contar el número de argumentos. Simplemente poner los encabezados correctos en su lugar puede ser complicado, y posiblemente haya llamadas al sistema que nunca estén expuestas como funciones de C directamente (no lo he visto para ver; es bastante improbable, sin embargo).

Puede ver cómo otro depurador, como GDB, hace el mismo trabajo.


La única lista que conozco es la fuente del kernel, en include/linux/syscalls.h . Pero eso es solo por nombre, no por número; Creo que necesitas usar el encabezado syscall.h para tu plataforma en particular para obtener los números. Y hay unos pocos #ifdefs en ese archivo ...



ausyscall - un programa que permite mapear nombres y números de syscall