Pourquoi presque toutes les bibliothèques partagées /usr/lib/
ont-elles le bit d'autorisation d'exécution exécutable? Je ne vois aucun cas d'utilisation pour les exécuter. Certains parviennent à brancher une main
fonction quelconque pour imprimer une note de copyright et de version abrégée, mais beaucoup ne le font même pas et commettent une erreur de segmentation lors de l'exécution.
Alors, quel est le point de régler cela x
? Tous les utilisateurs de la bibliothèque doivent-ils le faire? Que se passera-t-il si je suis dlopen()
une bibliothèque partagée qui a des 0644
autorisations?
libraries
conventions
Tadeusz A. Kadłubowski
la source
la source
/lib
et/usr/lib
sont libc et libpthread, et les deux affichent un avis de droit d’auteur lorsqu’elles sont exécutées.main()
symbole comme point d'entrée n'est pas un bug mineur, mais un choix de conception fondamental. Vous avez manqué mon point.Réponses:
Sous HP-UX, les bibliothèques partagées sont mappées dans la mémoire à l'aide de mmap (). Toutes les pages de mémoire du système ont des bits de protection couplés aux mécanismes de protection des pages de mémoire du noyau et du processeur. Pour exécuter le contenu de toute page de mémoire sur le système, PROT_EXEC doit être défini sur cette page - une fonctionnalité utile pour empêcher les exploitations d’exécution de données.
L'appel mmap () utilise les bits d'autorisation du fichier qu'il est sur le point de mapper pour définir les bits de protection des pages de mémoire mappées devant le contenir: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (à partir de sys / mman.h). Par conséquent, pour qu'une bibliothèque partagée puisse être utilisée sur HP-UX, le fichier contenant la bibliothèque partagée doit disposer des autorisations d'exécution afin de garantir que la bibliothèque mappée dispose également de l'autorisation d'exécution.
Une bibliothèque partagée avec le mode 644 sur un système HP-UX provoquera des vidages mémoire.
la source
Les objets partagés non exécutables fonctionnent correctement, mais les bibliothèques marquées comme exécutables peuvent également être exécutées en tant que programmes autonomes.
Aucun, sauf si vous souhaitez qu'ils émettent une version ou d'autres informations
Non
Vous obtiendrez un nouveau descripteur d'objet partagé (tant que le fichier est lisible, etc.) ... le bit exec n'affecte pas ceci
Quant aux raisons pour lesquelles les bibliothèques qui ne sont pas utilisables en tant qu’exécutables autonomes ont toujours le bit d’exécution défini: c’est probablement un artefact du système de construction ou du script de lien utilisé.
exemple de sortie, juste pour référence:
la source
main()
point d'entrée normal . Libc est un cas particulier. Ses développeurs ont fait cette note comme une fonctionnalité supplémentaire. Simplechmod a+x
de toute autre bibliothèque ne vous donnera pas cette fonctionnalité. Je ne vois toujours pas l'intérêt de configurer+x
toutes les bibliothèques..so
qui peuvent être exécutés doivent être marqués comme tels. Je modifierai ma réponse pour éviter d’impliquer que tout ce qui est défini avec le bit d’exécution est en réalité un exécutable autonome.