바이너리가 링크 된 라이브러리 찾기


40

소프트웨어와 연결된 libs 및 해당 버전을 나열하는 명령이 있다는 것을 알고 있습니다.

ld 또는 libtool이 있습니까?

그러나 나는 단지 기억할 수 없다. Google에서 시간을 보냈지 만 유용한 정보는 없었습니다.

업데이트
ldd <binary> (리눅스에 도움이 될 로부터 @ Ernelli 내가 그 발견 동안) otool -L <binary>맥 OS X에서 비슷한 무언가를


답변:


41

ldd binary-exec를 사용해보십시오

예:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)

댕! 그래서 첫 시도는 옳았습니다. 그냥 내 Mac에 설치해야 명령을 잘 알 수 있도록 ;-)
er4z0r

@ er4z0r : 참고로, Mac OS는 Linux가 아닌 BSD 입니다.
grawity

6
grwaity : 당신 말이 맞아요. ldd는 리눅스에서 도움이되지만 'otool -L <binary>'는 비슷한 것을 수행한다는 것을 알았습니다.
er4z0r

15

직접 필요한 것을 찾으려면 :

readelf -d APP | grep NEEDED

ldd다른 곳에서 언급했듯이 모든 직접 및 간접 라이브러리는 런타임에 필요한 모든 것을 보여줍니다. dlopen ()으로 동적으로 열 수 있기 때문에 전체 목록이 아닐 수도 있지만 99 %의 시간 동안 작동합니다.

ld 및 libtool은 컴파일 / 링크시 사용됩니다. 앱이 있으면 유용하지 않습니다.

편집 나중에 OSX에 대해 묻는 답변으로 볼 수 있지만 Linux 도구에 대한 답변을 추가하고 싶습니다.

한 가지 언급 한 것을 잊어 버렸습니다. 당신은 버전에 대해 물었습니다. "어떤 버전"질문 ldd에도 readelf대답 하지도 않습니다 . 찾고있는 라이브러리의 파일 이름을 알려주고 명명 규칙에 버전 정보가있을 수 있지만 아무것도 시행하지 않습니다. 심볼의 버전이 지정 될 수 있으며 nm이를 확인하려면 레벨이 훨씬 낮아야합니다 .


9

또 다른 방법은 objdump를 사용하는 것입니다.

objdump -x "이진"| grep 필요

이 바이너리에만 필요한 모든 종속성이 표시됩니다. 매우 유용한.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.