In Linux, dove posso trovare il codice sorgente per tutte le chiamate di sistema dato che ho l'albero dei sorgenti? Inoltre se volessi cercare il codice sorgente e l'assembly per una particolare chiamata di sistema c'è qualcosa che posso digitare come -my_system_call?Dove posso trovare il codice sorgente di chiamata di sistema?
risposta
Avrete bisogno delle fonti del kernel di Linux per vedere la vera fonte delle chiamate di sistema. Le pagine di manuale, se installate sul sistema locale, contengono solo la documentazione delle chiamate e non la loro stessa fonte.
Sfortunatamente, le chiamate di sistema non vengono memorizzate in una posizione particolare nell'intero albero del kernel. Questo perché varie chiamate di sistema possono fare riferimento a diverse parti del sistema (gestione dei processi, gestione del filesystem, ecc.) E quindi sarebbe impossibile memorizzarle separatamente dalla parte dell'albero relativa a quella particolare parte del sistema.
La cosa migliore che puoi fare è cercare la macro SYSCALL_DEFINE[0-6]
. Viene utilizzato (ovviamente) per definire il blocco di codice indicato come una chiamata di sistema. Ad esempio, fs/ioctl.c
ha il codice seguente:
SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
{
/* do freaky ioctl stuff */
}
Tale definizione significa che la syscall ioctl
è dichiarata e prende tre argomenti. Il numero accanto allo SYSCALL_DEFINE
indica il numero di argomenti. Per esempio, nel caso di getpid(void)
, ha dichiarato in kernel/timer.c
, abbiamo il seguente codice:
SYSCALL_DEFINE0(getpid)
{
return task_tgid_vnr(current);
}
speranza che cancella le cose un po '.
Dal punto di vista di un'applicazione, uno system call è un'operazione elementare e atomica eseguita dallo kernel.
Il Assembly Howto spiega cosa sta succedendo, in termini di istruzione della macchina.
Ovviamente, il kernel sta facendo un sacco di cose quando gestisce un syscall.
In realtà, si potrebbe quasi credere che l'intero codice del kernel sia dedicato a gestire tutte le chiamate di sistema (questo non è completamente vero, ma quasi, dal punto di vista delle applicazioni, il kernel è visibile solo attraverso le chiamate di sistema). L'altro answer di Daniel Kamil Kozar sta spiegando quale funzione del kernel sta iniziando la gestione di alcune chiamate di sistema (ma molto spesso, molte altre parti del kernel partecipano indirettamente alle chiamate di sistema, ad esempio lo scheduler partecipa indirettamente all'implementazione di fork
perché gestisce il processo figlio creato da un riuscito syscall fork
).
Lo so che è vecchio, ma ero alla ricerca per la fonte per _system_call()
troppo ed ho trovato questo bocconcino
codice vero e proprio per il punto di ingresso system_call può essere trovato in/usr/src/linux/kernel/sys_call. S Il codice reale per molte delle chiamate di sistema può essere trovato in /usr/src/linux/kernel/sys.c, e il resto viene trovato altrove. trova è tuo amico.
Presumo che questo è datato, perché non ho nemmeno quel file. Tuttavia, grep ha trovato ENTRY(system_call)
in arch/x86/kernel/entry_64.S e sembra essere la cosa che chiama le singole chiamate di sistema. Al momento non sono attivo sulla mia intel-syntax x86 asm, quindi dovrai cercare e vedere se questo è ciò che volevi.
'entry_64.S' non esiste più nella linea principale 4.8. – sherrellbc
- 1. Dove posso trovare il codice sorgente di gitk?
- 2. Dove trovare il codice sorgente per il percentile di NumPy
- 3. Dove posso trovare il codice sorgente per System.Numerics.BigInteger?
- 4. Dove posso trovare il codice sorgente delle utilità Unix?
- 5. Dove posso trovare il codice sorgente per WebMatrix.WebData.WebSecurity
- 6. Dove posso trovare il codice sorgente per gli array Java?
- 7. Dove posso trovare il codice sorgente Glassfish 4?
- 8. Dove trovare il codice sorgente dell'estensione NoScript di Mozilla?
- 9. Dove posso vedere il codice sorgente di glassfish sul web
- 10. Come trovare il codice sorgente della funzione nativa chiamata java
- 11. Dove posso trovare un buon codice sorgente C++?
- 12. Dove posso trovare il codice sorgente per il barattolo di base caricato a molla?
- 13. Dove posso trovare il codice sorgente Java per il codice Vigenere?
- 14. Codice sorgente R. Chiamata funzione
- 15. dove trovare il codice sorgente per la libreria standard C++
- 16. Dove posso trovare il codice sorgente per i comandi principali di Linux?
- 17. Dove posso trovare il codice sorgente per la funzione Square Root di Java?
- 18. Trovare il codice sorgente di cromo
- 19. GNU GSL dove trovo il codice sorgente?
- 20. Dove posso trovare l'archivio di codice "C/C++ Users Journal"?
- 21. Dove posso ottenere il codice sorgente dell'applicazione per fotocamera Android?
- 22. Dove posso trovare il codice sorgente per tutte le librerie standard C?
- 23. Dove posso trovare il codice sorgente per Singular (AngularJS per GWT)?
- 24. Come posso trovare il codice sorgente delle funzioni opencv?
- 25. dove posso trovare l'origine di com.android.internal.R.styleable.AlertDialog_multiChoiceItemLayout?
- 26. Dove posso trovare il codice sorgente per i metodi `native` nella libreria Java?
- 27. Dove posso trovare il codice sorgente per .net CLR e C#?
- 28. Dove posso trovare Mono.Cecil.Pdb.dll?
- 29. Utilizzo di Subversion, dove è memorizzato il codice sorgente "effettivo"?
- 30. Dove posso trovare il 16F877A.h?
http://kernel.org/ – TJD