Linux에서 현재로드 된 공유 객체를 보는 방법은 무엇입니까?


34

두 가지 관련 질문이 있습니다.

  • 공유 라이브러리가 현재로드되어 있는지 어떻게 알 수 있습니까? (즉, 시스템 전체의 프로세스 불가지론)
  • 프로세스가로드 한 모든 공유 라이브러리를 어떻게 볼 수 있습니까?

답변:


40

당신은 둘 다 할 수 있습니다 lsof. 라이브러리가 열려 있거나 매핑 된 프로세스를 확인하려면 다음을 수행하십시오.

lsof /path/to/lib.so

프로세스가 열거 나 매핑 한 파일 (공유 라이브러리 포함)을 보려면 다음을 수행하십시오.

lsof -p <pid>

22

프로세스에 무엇이로드되는지 확인하는 다른 방법은 /proc/PID/maps파일 을 보는 것 입니다. 여기에는 매핑 된 공유 객체를 포함하여 주소 공간에 매핑 된 모든 것이 표시됩니다.


임베디드 ARM 플랫폼에서 잘 작동했습니다. 의 BusyBox 구현 lsof에는 필요한 기능이 없었습니다.
Alex Che

7
sudo grep libcairo.so /proc/*/maps

/proc/PID/maps Rich언급 한 모든 것을 번 에 탐색 할 수있는 좋은 방법 입니다. 샘플 출력 :

/proc/8390/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6

또한 awkbash-fu는 출력을 더 세분화 할 수 있습니다.

이 방법은 또한 Ubuntu 18.04에서 해킹 된 최소 설정으로dlopen 테스트 한 라이브러리를 보여줍니다 .sleep(1000)


4

루트로 다음 명령을 실행하고 전체 목록을 볼 수 있습니다.

cat /proc/*/maps | awk '{print $6;}' | grep '\.so' | sort | uniq

lsof가없는 사용자를위한 것입니다.


왜 사용자가 그렇게하도록 하시겠습니까? 제발 편집 이해에 대한 답을.
CaldeiraG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.