In che modo bash esegue un file ELF?


8

Quando sono sul mio Linux Box, utilizzo bash come shell. Ora mi chiedevo come bash gestisca l'esecuzione di un file ELF, cioè quando scrivo ./program e il programma è un file ELF. Ho grepped bash-4.3.tar.gz, non sembra esserci una sorta di parser di numeri magici per scoprire se il file è un ELF né ho trovato un syscall exec ().

Come funziona il processo? In che modo bash passa l'esecuzione dell'ELF al sistema operativo?

Risposte:


15

Bash non sa nulla dell'ELF. Vede semplicemente che gli hai chiesto di eseguire un programma esterno, quindi passa il nome che gli hai dato così com'è execve(2). La conoscenza di cose come i formati di file eseguibili, le linee shebang e le autorizzazioni di esecuzione risiede dietro quel syscall , nel kernel.

(È lo stesso per altre shell, anche se potrebbero scegliere di usare un'altra funzione nella exec(3)famiglia.)

In Bash 4.3, ciò accade sulla riga 5195 di execute_cmd.cnella shell_execve()funzione.

Se si vuole capire Linux a livello di codice sorgente, vi consiglio di scaricare una copia della ricerca Unix V6 o V7 , e passando attraverso che , piuttosto che tutta la complessità che è nelle moderni sistemi Linux. Il Lions Book è una buona guida al codice.

V7 è dove la shell Bourne ha fatto il suo debutto. Il suo intero codice sorgente C è poco più della metà delle dimensioni di quel solo file C in Bash. La shell Thompson in V6 è quasi la metà delle dimensioni della shell Bourne originale. Tuttavia, entrambe queste shell più semplici fanno lo stesso tipo di cose di Bash e per lo stesso motivo. (Sembra essere una execv(2)chiamata dalla texec()shell Thompson e una execve()chiamata dal modulo execs()della shell Bourne service.c.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.