Caricatori del programma in Linux e Windows

3

Mi stavo chiedendo come si chiamano i programmi di caricamento in Linux e Windows, cioè i loro nomi di comandi? Le definizioni di Loaders "sono

In computing, a loader is the part of an operating system that is responsible for loading programs.

    
posta Tim 25.07.2011 - 15:53
fonte

5 risposte

6

Ci sono almeno 3 cose che potresti chiamare "loader" in Linux. La parte "ld" di una compilazione, che raggruppa vari file object (.o) e archive (.a) in un singolo eseguibile è uno. "ld" controlla anche i file di oggetti condivisi (.so) per vedere se il linker dinamico può funzionare correttamente.

Il linker dinamico (do man ld.so per i dettagli) viene eseguito dal kernel Linux come parte dell'avvio di un eseguibile in formato ELF. Legge le informazioni di collegamento dal file ELF e quindi (almeno) le mappe nei file di oggetti condivisi (suffisso .so). I dettagli sono piuttosto coinvolti e, almeno a volte, comportano l'aggiornamento del GOT, una sezione in memoria che mappa una destinazione di ramo compilata nell'indirizzo effettivo e caricato del codice della libreria. Vedi: link per molti dettagli.

C'è anche una parte del kernel di Linux che si legge nei file eseguibili, che a volte viene chiamato "loader". Quando si configura un kernel linux, è possibile scegliere di includere o escludere alcuni di questi caricatori di formati di file eseguibili (a.out, principalmente). Avevo il codice di Linux 2.6.20.9 in agguato, e ho trovato "caricatori" per diversi formati eseguibili in linux-2.6.20.9 / fs /: binfmt_aout.c, binfmt_elf.c, binfmt_script.c e alcuni altri.

Non conosco quasi nulla di come Windows fa questo stesso processo, ma deve fare la maggior parte o tutte le stesse cose.

    
risposta data 25.07.2011 - 16:53
fonte
4

Il loader è parte del kernel e viene solitamente chiamato come parte di un chiamata di sistema . Non è un comando con nome digitato nella riga di comando. Invece, la shell (riga di comando o GUI) la chiama quando fai cose come premi invio dopo un comando o fai doppio clic su un'icona.

    
risposta data 25.07.2011 - 16:05
fonte
1

Come ha notato @falcon, il loader Linux si chiama "ld". In Windows, non so quanti dettagli del caricamento e dell'esecuzione del programma vengano effettivamente resi pubblici.

    
risposta data 25.07.2011 - 16:31
fonte
1

Il punto cruciale dell'idea qui è che il sistema operativo sta guidando il caricamento del programma. Non esiste un comando diretto per caricare un programma in Linux o Windows, tutto questo è gestito dal sistema operativo stesso. In questo processo, il sistema operativo alloca memoria, spazio stack / heap, tutti i registri necessari e un registro di stato del programma, che tiene traccia di tutto ciò quando i processi vengono sospesi / interrotti. Questo è il modo in cui la modalità "protetta / utente" ci salva dal far esplodere un computer perché eseguiamo sempre un triplo errore perché stiamo usando comandi che non dovrebbero essere usati (la maggior parte viene eseguita nell'anello 0 - cioè in modalità reale, molto rimosso da noi).

L'elemento su cui gli altri ti stanno indicando sono .bin's e il linker / loader per gcc / asm / etc che configurano un file solo quando il sistema operativo chiama il caricamento del programma, questi ancora non influiscono direttamente il caricamento del programma (perché è possibile chiamare ld per lanciare il programma in RAM e configurare i registri, anche se è possibile chiamarlo per dire al programma come compilare in modo che dice che voglio caricare i registri x, ye z e inizia nella posizione di memoria 0x0000FFFF ....) e diety / os disposti a metterlo lì.

    
risposta data 25.07.2011 - 17:39
fonte
1

Rispondendo rigorosamente: niente.

I comandi per caricare programmi non esistono come comandi. Per semplice motivo, che in genere, qualsiasi comando OS è in realtà un programma. Quindi come caricare il programma, che dovrebbe caricare altri programmi, quando il programma stesso deve essere caricato al primo posto?

Se analizzi la semantica della definizione ... Allora la risposta migliore è "shell". Shell è il comando per caricare altri programmi (che sono comandi).

In Windows è: explorer.exe, cmd.exe, debug.exe e potrebbe essere qualche altro

    
risposta data 25.07.2011 - 20:51
fonte

Leggi altre domande sui tag