Perché sono eseguibili librerie condivise su Linux?


8

Sono solo curioso.

bash-3.00$  ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'

Tutto sembra funzionare bene solo con + r. Ho notato che la maggior parte dei file .so in / usr / lib hanno + x set ...

Perché si suppone che le librerie condivise abbiano il bit eseguibile impostato? Cosa potrebbe succedere se non lo imposto?


2
Le librerie sicuramente non hanno bisogno di + x per funzionare correttamente. Forse sono collegamenti comunque? I collegamenti avrebbero bisogno di + x da seguire.
Chris S,

Sì, non hanno bisogno di + x, ma la maggior parte delle librerie ha impostato.
Tomo,

Questa domanda è stata posta anche su Unix e Linux: unix.stackexchange.com/questions/40587/… (e qui ho ottenuto la risposta corretta)
Michał Górny,

Risposte:


3

In realtà dipende ldddall'implementazione. ldddi solito è uno script, puoi modificarlo per vedere dove e perché ottieni quell'errore.

Su Ubuntu 10.04, lddcontrolla readsolo l' autorizzazione. Potrebbe dare l'errore non un eseguibile dinamico se il file non è un ELF ( formato eseguibile e collegabile ). Le librerie qui sono tutte -rw-r--r--, per esempio

$ find /usr/lib -type f -name "libm*.so*" -ls
(...)
-rw-r--r--   1 root     root       216800 Feb 26 22:20 /usr/lib/libmp.so.3.1.16
-rw-r--r--   1 root     root        76728 Mar 14 04:23 /usr/lib/libmjpegutils-1.9.so.0.0.0
-rw-r--r--   1 root     root       134464 Jan 29  2010 /usr/lib/libm17n-core.so.0.3.0
-rw-r--r--   1 root     root       290480 Feb 17  2010 /usr/lib/libmtp.so.8.3.2

Non è scioccante desiderare un xaccesso per una biblioteca condivisa. La executablemodalità è una convenzione che offre al sistema operativo un altro livello di controllo dei diritti di accesso. Il caricatore eseguibile controlla tale accesso, per garantire che l'utente possa eseguirlo, ma anche per prevenire errori (alcuni script o programmi non dovrebbero essere eseguiti da alcune persone).

Questo potrebbe essere esteso alle librerie condivise per lo stesso motivo, ma le librerie condivise non possono essere eseguite da sole e sono meno soggette a errori da usare per caso ). Pertanto la necessità è meno ovvia (l' raccesso è sufficiente).


3

Puoi effettivamente eseguire molte librerie, vedi ad esempio cosa succede quando digiti /lib/libc.so.6sulla tua shell su un recente sistema GNU / Linux.


0

pensa come avere un file eseguibile con -x. Non sarai in grado di eseguirlo. Considera queste librerie come una raccolta di funzioni generali, che vengono chiamate da un altro programma (diciamo myProgra). Se non puoi eseguire le librerie / le funzioni ... allora non hai niente

Un esempio

function1() {} 
function2() {} 
int main() { 
printf("Let's call func1"); 
function1(); 
printf("Let's call func2"); 
function2(); 
} 

Ora se inserisci funzione1 e function2 in un altro file e lo includi, allora sei una libreria. (Naturalmente è qualcosa di più complicato. Questo è solo un esempio)

Ma in ogni caso, come puoi vedere, devi eseguire il codice che viene incluso nella libreria


Ma esegui eseguibili, non librerie.
Ignacio Vazquez-Abrams,

Vedi la versione modificata sopra
Nikolaidis Fotis

0

La chiave è il formato del file, formato eseguibile e collegabile. Poiché lo stesso formato file esatto viene utilizzato per identificare sia un file eseguibile che una libreria condivisa, entrambi devono disporre delle autorizzazioni eseguibili appropriate per il caricatore del sistema operativo. Ciò consente l'utilizzo di un singolo caricatore e degli eseguibili come DSO se includono una tabella dei simboli.


Quindi, il caricatore utilizza i bit di autorizzazione, non l'intestazione del file, per identificare le cose da caricare?
Tomo,

Il caricatore utilizza l'intestazione del file per identificare i contenuti come DYN o EXEC e fare le cose appropriate. Il bit di esecuzione è per il sistema operativo, non per il caricatore. ELF è un formato eseguibile, senza il bit di esecuzione, il sistema operativo non consentirà al caricatore di eseguire il file per leggere le intestazioni. Dai un'occhiata a Wikipedia per ulteriori informazioni su ELF en.wikipedia.org/wiki/Executable_and_Linkable_Format .
nzwulfin,
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.