Ricerca dei parametri di registro per le chiamate di sistema

-1

Consultando vari tutorial e libri sparsi, sono stato in grado di apprendere che la chiamata di sistema "uscita" di Linux a 64 bit è 60 e il valore dello stato viene spostato su edi . Allo stesso modo, "scrivi" ha il numero di chiamata 1 e il descrittore di file deve essere passato a edi , ecc.

Tuttavia, sembra molto difficile trovare informazioni sulle altre chiamate di sistema. Ad esempio, questa tabella mostra i registri pertinenti per ogni chiamata , ma in es sys_chmod , un valore di tipo mode_t deve essere spostato su rsi . Dove si trovano i diversi valori interi che possono essere passati come argomenti? man 2 chmod non sembra averli e grep ing attraverso i file di intestazione in / usr / include non è stato utile.

In generale, come si fa a trovare un riferimento coerente per i dettagli di basso livello come questi? Sono considerati inutili, dal momento che la stessa funzionalità può generalmente essere eseguita con C piuttosto che assemblare? Sto leggendo i manuali dello sviluppatore AMD64 , che sono utili per la comprensione concettuale, ma quelli non mi aiutano con le chiamate di sistema Linux.

    
posta Vale132 08.02.2016 - 04:57
fonte

1 risposta

1

La documentazione pertinente è chiamata Interfaccia binaria delle applicazioni (ABI) e convenzioni di segnalazione . Entrambi sono specifici del processore e del sistema operativo.

Leggi Linux ABI x86_64 . Vedi anche syscalls (2) per i chiamate di sistema . Quasi tutte le chiamate di sistema hanno la sua pagina man nella sezione 2.

BTW, chmod (2) elenca varie costanti simboliche come S_ISUID , S_IXUSR adatto per costruire il secondo argomento mode_t a chmod

Naturalmente, dare un'occhiata dentro al codice sorgente di alcune implementazioni della libreria standard C dovrebbe essere di grande aiuto (per comprendere alcuni dettagli cruenti). Trovo molto leggibile il codice sorgente di musl-libc .

Utilizza anche strace (1) per capire le syscalls fatte da alcuni programmi e ampli ; processi.

I numeri di syscall sono elencati in /usr/include/asm/unistd_64.h che ha #define __NR_exit 60 ecc.

Vedi anche vdso (7) .

    
risposta data 08.02.2016 - 07:00
fonte

Leggi altre domande sui tag