공유 라이브러리가 실행 가능한 이유는 무엇입니까?

공유 라이브러리가 실행 가능한 이유는 무엇입니까?

거의 모든 공유 라이브러리에 /usr/lib/실행 권한 비트가 설정된 이유는 무엇입니까? 구현에 대한 사용 사례가 없습니다. 일부는 간단한 저작권 및 릴리스 노트를 인쇄하기 위해 어떤 형태의 기능을 연결 main하지만 많은 경우에는 실행 시 이 작업을 수행하지 않고 세그폴트를 수행합니다.

그렇다면 이것을 설정하는 요점은 무엇입니까 x? 모든 라이브러리 패키저가 이 작업을 수행해야 합니까? 내 공유 라이브러리에 권한이 있으면 dlopen()어떻게 되나요 0644?

답변1

HP-UX에서 공유 라이브러리는 mmap()을 사용하여 메모리에 매핑되며 시스템의 모든 메모리 페이지에는 보호 비트가 있습니다. 이러한 보호 비트는 커널 및 프로세서 하드웨어의 메모리 페이지 보호 메커니즘과 결합됩니다. 시스템의 메모리 페이지 내용을 실행하려면 해당 페이지에 PROT_EXEC가 설정되어 있어야 합니다. 이는 데이터 실행 취약점을 방지하는 데 유용한 기능입니다.

mmap() 호출은 매핑될 파일에 대한 권한 비트를 사용하여 파일이 포함된 매핑된 메모리 페이지의 보호 비트를 정의합니다: rwx -> PROT_READ|PROT_WRITE|PROT_EXEC(sys/mman.h에서). 따라서 공유 라이브러리를 HP-UX에서 사용하려면 공유 라이브러리가 포함된 파일에 실행 권한이 있어야 매핑된 라이브러리에도 실행 권한이 있는지 확인해야 합니다.

HP-UX 시스템에서 모드 644의 공유 라이브러리는 코어 덤프를 발생시킵니다.

답변2

실행 불가능한 공유 객체는 제대로 작동하지만 실행 가능으로 표시된 라이브러리는반품독립 실행형 프로그램으로 실행할 수 있습니다.

그렇다면 이 x를 설정하는 요점은 무엇입니까?

없음(버전이나 기타 정보 전송을 원하지 않는 한)

모든 라이브러리 패키저가 이 작업을 수행해야 합니까?

아니요

0644 권한이 있는 공유 라이브러리를 dlopen()하면 어떻게 되나요?

새로운 공유 객체 핸들을 얻게 됩니다(파일을 읽을 수 있는 한)... exec 비트는 이에 영향을 미치지 않습니다


독립 실행형 실행 파일로 사용할 수 없는 라이브러리에 여전히 exec 비트 세트가 있는 이유는 빌드 시스템이나 사용된 링커 스크립트의 아티팩트일 수 있습니다.


샘플 출력(참고용):

$ /lib/i386-linux-gnu/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10) stable release version 2.15, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.6.3.
Compiled on a Linux 3.2.14 system on 2012-04-19.
Available extensions:
    crypt add-on version 2.1 by Michael Glad and others
    GNU Libidn by Simon Josefsson
    Native POSIX Threads Library by Ulrich Drepper et al
    BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.

관련 정보