Por que quase todas as bibliotecas compartilhadas /usr/lib/
têm o bit de permissão executável definido? Não vejo nenhum caso de uso para executá-los. Alguns conseguem conectar alguma forma de main
função para imprimir uma pequena nota de direitos autorais e versão, mas muitos não fazem isso e se tornam falhas após a execução.
Então, qual é o objetivo de definir isso x
? Todos os empacotadores de bibliotecas devem fazer isso? O que acontecerá se eu for dlopen()
uma biblioteca compartilhada com 0644
permissões?
libraries
conventions
Tadeusz A. Kadłubowski
fonte
fonte
/lib
e/usr/lib
são libc e libpthread, e ambas imprimem um aviso de direitos autorais quando executadas.main()
símbolo como ponto de entrada não é um bug menor, mas uma escolha de design fundamental. Você perdeu o meu argumento.Respostas:
No HP-UX, as bibliotecas compartilhadas são mapeadas na memória usando mmap () e todas as páginas de memória no sistema possuem bits de proteção que são acoplados aos mecanismos de proteção de página de memória do hardware do kernel e do processador. Para executar o conteúdo de qualquer página de memória no sistema, essa página deve ter PROT_EXEC configurado - um recurso útil para impedir explorações de execução de dados.
A chamada mmap () usa os bits de permissão no arquivo que está prestes a mapear para definir os bits de proteção das páginas de memória mapeadas que devem conter: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (de sys / mman.h). portanto, para que uma biblioteca compartilhada possa ser usada no HP-UX, o arquivo que contém a biblioteca compartilhada deve ter permissões de execução para garantir que a biblioteca mapeada também tenha permissão de execução.
Uma biblioteca compartilhada com o modo 644 em um sistema HP-UX causará despejos de núcleo.
fonte
Objetos compartilhados não executáveis funcionam bem, mas as bibliotecas marcadas como executáveis também podem ser executáveis como programas independentes.
Nenhuma, a menos que você queira que eles emitam versão ou outras informações
Não
Você obterá um novo identificador de objeto compartilhado (desde que o arquivo seja legível etc.) ... o bit exec não afeta isso
Por que as bibliotecas que não são utilizáveis como executáveis independentes ainda possuem o bit exec definido: esse é provavelmente apenas um artefato do sistema de construção ou script de link usado.
saída de exemplo, apenas para referência:
fonte
main()
ponto de entrada normal . Libc é um outlier. Seus desenvolvedores fizeram essa observação como uma funcionalidade extra. Simpleschmod a+x
de qualquer outra biblioteca não fornecerá essa funcionalidade. Ainda não vejo o ponto de configuração+x
para todas as bibliotecas..so
que podem ser executados devem ser marcados como tal. Vou alterar minha resposta para evitar sugerir que tudo com o conjunto de bits exec é realmente um executável independente.