Je suis juste curieux.
bash-3.00$ ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'
Tout semble bien fonctionner juste avec + r. J'ai remarqué que la plupart des fichiers .so dans / usr / lib ont + x défini ...
Pourquoi les bibliothèques partagées sont-elles censées avoir un bit exécutable défini? Que pourrait-il arriver si je ne le réglais pas?
Réponses:
En fait, cela dépend de la
ldd
mise en œuvre.ldd
est généralement un script, vous pouvez le modifier pour voir où et pourquoi vous obtenez cette erreur.Sur Ubuntu 10.04,
ldd
vérifieread
uniquement l' autorisation. Il peut donner l'erreur non un exécutable dynamique si le fichier n'est pas un ELF ( Executable and Linkable Format ). Les bibliothèques ici sont toutes-rw-r--r--
, par exempleIl n'est pas choquant de vouloir un
x
accès à une bibliothèque partagée. Leexecutable
mode est une convention qui donne au système d'exploitation un autre niveau de contrôle des droits d'accès. Le chargeur exécutable contrôle cet accès, pour garantir que l'utilisateur peut l'exécuter, mais aussi pour éviter les erreurs (certains scripts ou programmes ne doivent pas être exécutés par certaines personnes).Cela pourrait être étendu aux bibliothèques partagées pour la même raison - mais les bibliothèques partagées ne peuvent pas fonctionner seules et sont moins sujettes aux erreurs d'être utilisées par accident ). Ainsi, le besoin est moins évident (l'
r
accès suffit).la source
Vous pouvez réellement exécuter de nombreuses bibliothèques, voyez par exemple ce qui se passe lorsque vous tapez
/lib/libc.so.6
sur votre shell sur un système GNU / Linux récent.la source
pensez comme avoir un fichier exécutable avec -x. Vous ne pourrez pas l'exécuter. Considérez ces bibliothèques comme une collection de fonctions générales appelées par un autre programme (disons myProgra). Si vous ne pouvez pas exécuter les bibliothèques / fonction ... alors vous n'avez rien
Un exemple
Maintenant, si vous placez function1 et function2 dans un autre fichier et que vous l'incluez, alors vous une bibliothèque. (Bien sûr, c'est quelque chose de plus compliqué. Ce n'est qu'un exemple)
Mais dans tous les cas, comme vous pouvez le voir, vous devez exécuter le code qui est inclus dans la bibliothèque
la source
La clé est le format de fichier, le format exécutable et linkable. Étant donné que le même format de fichier exact est utilisé pour identifier à la fois un exécutable et une bibliothèque partagée, les deux doivent disposer des autorisations d'exécutables appropriées pour le chargeur de système d'exploitation. Cela permet à un chargeur unique et aux exécutables d'être utilisés comme DSO s'ils incluent une table de symboles.
la source