En Linux, ¿dónde puedo encontrar el código fuente para todas las llamadas al sistema dado que tengo el árbol de fuentes? Además, si tuviera que buscar el código fuente y el ensamblaje para una llamada al sistema en particular ¿hay algo que pueda escribir en terminal como -my_system_call?¿Dónde puedo encontrar el código fuente de la llamada del sistema?
Respuesta
Necesitará las fuentes del kernel de Linux para ver el origen real de las llamadas al sistema. Las páginas de manual, si están instaladas en su sistema local, solo contienen la documentación de las llamadas y no su fuente en sí.
Desafortunadamente para usted, las llamadas al sistema no se almacenan en una sola ubicación en todo el árbol del kernel. Esto se debe a que varias llamadas al sistema pueden referirse a diferentes partes del sistema (administración de procesos, administración del sistema de archivos, etc.) y, por lo tanto, sería imposible almacenarlas aparte de la parte del árbol relacionada con esa parte particular del sistema.
Lo mejor que puede hacer es buscar la macro SYSCALL_DEFINE[0-6]
. Se usa (obviamente) para definir el bloque de código dado como una llamada al sistema. Por ejemplo, fs/ioctl.c
tiene el siguiente código:
SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
{
/* do freaky ioctl stuff */
}
Esta definición significa que la llamada al sistema ioctl
se declara y tiene tres argumentos. El número al lado del SYSCALL_DEFINE
significa la cantidad de argumentos. Por ejemplo, en el caso de getpid(void)
, declaró en kernel/timer.c
, tenemos el siguiente código:
SYSCALL_DEFINE0(getpid)
{
return task_tgid_vnr(current);
}
esperanza de que aclara las cosas un poco.
Desde el punto de vista de una aplicación, un system call es una operación elemental y atómica realizada por el kernel.
El Assembly Howto explica lo que está sucediendo, en términos de instrucción de la máquina.
Por supuesto, el kernel está haciendo muchas cosas al manejar un syscall.
En realidad, casi podría creer que todo el código kernel está dedicado a manejar todas las llamadas del sistema (esto no es del todo cierto, pero casi, desde el punto de vista de las aplicaciones, el núcleo solo es visible a través de llamadas del sistema). El otro answer de Daniel Kamil Kozar explica qué función del kernel está comenzando a manejar algunas llamadas al sistema (pero muy a menudo, muchas otras partes del núcleo participan indirectamente en las llamadas al sistema, por ejemplo, el programador participa indirectamente en la implementación fork
porque gestiona el proceso hijo creado por un exitoso fork
syscall).
Sé que es viejo, pero yo estaba buscando la fuente de _system_call()
también y encontré este dato
código real para el punto de entrada system_call se puede encontrar en/usr/src/linux/kernel/sys_call. S El código real para muchas de las llamadas al sistema se puede encontrar en /usr/src/linux/kernel/sys.c, y el resto se encuentra en otra parte. encuentra es tu amigo
Supongo que esta fecha, porque ni siquiera tengo ese archivo. Sin embargo, grep encontró ENTRY(system_call)
en arch/x86/kernel/entry_64.S y parece ser lo que llama a las llamadas individuales del sistema. No estoy al tanto de mi asn de intel-sintaxis x86 en este momento, así que tendrás que mirar y ver si esto es lo que querías.
'entry_64.S' ya no existe en la línea principal 4.8. – sherrellbc
- 1. ¿De dónde puedo encontrar el código fuente del comando cp?
- 2. ¿Dónde puedo encontrar el código fuente de Flex?
- 3. ¿Dónde encontrar el código fuente de BitTorrent?
- 4. ¿Dónde puedo encontrar el código fuente de System.Numerics.BigInteger?
- 5. ¿Dónde puedo encontrar el código fuente JDK 1.5?
- 6. ¿Dónde puedo encontrar la fuente de System.Web.Optimization?
- 7. ¿Dónde puedo encontrar la primera versión del sistema operativo Linux?
- 8. ¿Dónde puedo encontrar un buen código fuente de C++?
- 9. ¿Dónde puedo encontrar el widget del editor de código fuente Qt4?
- 10. ¿Dónde puedo ver el código fuente del Sun JDK?
- 11. ¿Dónde encontrar el código fuente JSSE/JCE de Java 6?
- 12. ¿Dónde puedo encontrar el código fuente para la función de raíz cuadrada de Java?
- 13. ¿Dónde puedo encontrar la fuente de la jarra springloaded-core?
- 14. ¿Dónde puedo encontrar el código fuente de la clase javax.swing.BorderLayout, por favor?
- 15. ¿Dónde está el código fuente del compilador de Java?
- 16. ¿Dónde puedo encontrar el código fuente de Java para el cifrado Vigenere?
- 17. ¿Dónde puedo encontrar el código fuente de las matrices de Java?
- 18. ¿Dónde puedo encontrar el código fuente de las utilidades de Unix?
- 19. ¿Dónde puedo descargar el código fuente de "OpenGL"?
- 20. Dónde está el código fuente para Html.TextBoxFor
- 21. Cómo encontrar el código fuente de la función Java nativa llamada
- 22. ¿Dónde puedo encontrar el código fuente para todas las bibliotecas estándar de C?
- 23. ¿Dónde puedo encontrar el código fuente para los comandos básicos de Linux?
- 24. Dónde agrego una llamada al sistema en Linux fuente del kernel
- 25. ¿Dónde está el código fuente del navegador web de Android?
- 26. ¿Dónde está el código fuente del tipo python 'dict'?
- 27. ¿Dónde puedo encontrar el código fuente para .net CLR y C#?
- 28. ¿Dónde puedo encontrar códigos fuente XHTML5 de muestra?
- 29. ¿Dónde puedo encontrar la implementación atof más rápida del mundo?
- 30. ¿Dónde puedo encontrar la implementación de XMLHttpRequest?
http://kernel.org/ – TJD