¿Por qué casi todas las bibliotecas compartidas /usr/lib/
tienen establecido el bit de permiso ejecutable? No veo ningún caso de uso para ejecutarlos. Algunos logran conectar alguna forma de main
función para imprimir una breve nota de copyright y versión, pero muchos ni siquiera lo hacen y no cumplen con la ejecución.
Entonces, ¿cuál es el punto de establecer esto x
? ¿Todos los empaquetadores de la biblioteca deben hacer eso? ¿Qué sucederá si tengo dlopen()
una biblioteca compartida que tiene 0644
permisos?
libraries
conventions
Tadeusz A. Kadłubowski
fuente
fuente
/lib
y/usr/lib
son libc y libpthread, y ambas imprimen un aviso de copyright cuando se ejecutan.main()
símbolo como punto de entrada no es un error menor, sino una elección de diseño fundamental. Te perdiste mi punto.Respuestas:
Bajo HP-UX, las bibliotecas compartidas se asignan a la memoria usando mmap (), y todas las páginas de memoria en el sistema tienen bits de protección que se acoplan con los mecanismos de protección de la página de memoria del kernel y el hardware del procesador. Para ejecutar el contenido de cualquier página de memoria en el sistema, esa página debe tener configurado PROT_EXEC, una característica útil para evitar ataques de ejecución de datos.
La llamada mmap () utiliza los bits de permiso en el archivo que está a punto de asignar para definir los bits de protección de las páginas de memoria asignadas que lo van a contener: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (de sys / mman.h). para que una biblioteca compartida pueda utilizarse en HP-UX, el archivo que contiene la biblioteca compartida debe tener permisos de ejecución para garantizar que la biblioteca asignada también tenga permiso de ejecución.
Una biblioteca compartida con modo 644 en un sistema HP-UX provocará volcados de núcleo.
fuente
Los objetos compartidos no ejecutables funcionan bien, pero las bibliotecas marcadas como ejecutables también pueden ejecutarse como programas independientes.
Ninguno, a menos que desee que emitan la versión u otra información
No
Obtendrá un nuevo identificador de objeto compartido (siempre que el archivo sea legible, etc.) ... el bit de ejecución no afecta esto
En cuanto a por qué las bibliotecas que no son utilizables como ejecutables independientes todavía tienen el conjunto de bits exec: esto es probablemente solo un artefacto del sistema de compilación o script de enlace utilizado.
ejemplo de salida, solo como referencia:
fuente
main()
punto de entrada normal . Libc es un caso atípico. Sus desarrolladores hicieron esta nota como una funcionalidad adicional. Simplechmod a+x
de cualquier otra biblioteca no le dará esta funcionalidad. Todavía no veo el punto de configuración+x
para todas las bibliotecas..so
que pueden ejecutarse deben marcarse como tales. Enmendaré mi respuesta para evitar implicar que todo con el conjunto de bits exec es realmente un ejecutable independiente.