Linux에서 바이너리의 직접 종속성과 간접 종속성을 구별합니까?

Linux에서 바이너리의 직접 종속성과 간접 종속성을 구별합니까?

lddLinux에서는 특정 바이너리가 의존하는 모든 공유 라이브러리 목록을 제공합니다. 이는 일반적으로 바이너리를 생성하는 데 사용되는 링커 명령줄에 나열된 라이브러리보다 훨씬 더 광범위합니다. 여기에는 이러한 라이브러리의 종속성이 전부는 아니더라도 대부분이 포함됩니다.

명시적으로 링크된 라이브러리 목록(즉, 직접 종속성)만 결정하는 것이 가능합니까? 그렇다면 어떻게 합니까?

답변1

readelf -d덤프 바이너리의 "동적" 부분을 사용할 수 있습니다 . 여기에는 필수 라이브러리가 포함됩니다.

예를 들어 다음 lddreadelf비교해보세요 /bin/ls.


$ ldd /bin/ls
        linux-vdso.so.1 =>  (0x00007fff190da000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f082f94e000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007f082f749000)
        libacl.so.1 => /lib64/libacl.so.1 (0x00007f082f540000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f082f172000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f082ef10000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f082ed0c000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f082fb75000)
        libattr.so.1 => /lib64/libattr.so.1 (0x00007f082eb07000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f082e8eb000)

$ readelf -d /bin/ls | grep NEEDED
 0x0000000000000001 (NEEDED)             Shared library: [libselinux.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libcap.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libacl.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

.so파일로 도 이 작업을 수행할 수 있습니다 .

$ readelf -d /lib64/libpcre.so.1 | grep NEEDED
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

답변2

직접 종속성을 나열하려는 경우재귀적으로,lddtreepax-utils에서 사용:

$ lddtree /bin/file
/bin/file (interpreter => /lib64/ld-linux-x86-64.so.2)
    libmagic.so.1 => /usr/lib/libmagic.so.1
        libzstd.so.1 => /usr/lib/libzstd.so.1
        liblzma.so.5 => /usr/lib/liblzma.so.5
        libbz2.so.1.0 => /usr/lib/libbz2.so.1.0
        libz.so.1 => /usr/lib/libz.so.1
    libseccomp.so.2 => /usr/lib/libseccomp.so.2
    libc.so.6 => /usr/lib/libc.so.6

(이것은 내부적으로 python-pyelftools를 사용합니다.)

관련 정보