¿Cómo ejecuta bash un archivo ELF?


8

Cuando estoy en mi Linux Box, uso bash como shell. Ahora me preguntaba cómo bash maneja la ejecución de un archivo ELF, es decir cuando escribo ./program y el programa es un archivo ELF. Apreté el bash-4.3.tar.gz, no parece haber algún tipo de analizador de números mágicos para averiguar si el archivo es un ELF ni encontré un syscall exec ().

¿Cómo funciona el proceso? ¿Cómo pasa bash la ejecución del ELF al sistema operativo?

Respuestas:


15

Bash no sabe nada sobre ELF. Simplemente ve que le pidió que ejecutara un programa externo, por lo que le pasa el nombre que le dio como está execve(2). El conocimiento de cosas como formatos de archivos ejecutables, líneas shebang y permisos de ejecución se encuentra detrás de esa llamada al sistema , en el núcleo.

(Es lo mismo para otros shells, aunque pueden optar por usar otra función en la exec(3)familia).

En Bash 4.3, esto sucede en la línea 5195 de execute_cmd.cla shell_execve()función.

Si desea comprender Linux en el nivel del código fuente, le recomiendo descargar una copia de Research Unix V6 o V7 , y pasar por eso en lugar de toda la complejidad de los sistemas Linux modernos. The Lions Book es una buena guía para el código.

V7 es donde el shell Bourne hizo su debut. Todo su código fuente C es un poco más de la mitad del tamaño de ese archivo C en Bash. El shell Thompson en V6 es casi la mitad del tamaño del shell Bourne original. Sin embargo, estos dos proyectiles más simples hacen el mismo tipo de cosas que Bash, y por la misma razón. (Parece ser una execv(2)llamada desde texec()el shell de Thompson y una execve()llamada desde execs()el service.cmódulo del shell Bourne ).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.