web-dev-qa-db-ja.com

Linuxで現在ロードされている共有オブジェクトを確認するにはどうすればよいですか?

関連する質問が2つあります。

  • 共有ライブラリが現在ロードされているかどうかを確認するにはどうすればよいですか? (つまり、システム全体、プロセスにとらわれない)
  • プロセスによって読み込まれたすべての共有ライブラリを確認するにはどうすればよいですか?
42
Max

lsofを使用すると、両方を実行できます。どのプロセスがライブラリを開いているか、マップしているかを確認するには、次のようにします。

lsof /path/to/lib.so

また、プロセスが開いているファイルやマップしているファイル(共有ライブラリを含む)を確認するには、次のようにします。

lsof -p <pid>
47
TomH

プロセスに何がロードされているかを確認する別の方法は、/proc/PID/mapsファイル。これは、マップされた共有オブジェクトを含む、アドレス空間にマップされたすべてを示します。

25
Rich Homolka
_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
_

さらにawkとbash-fuを使用すると、出力をさらに絞り込むことができます。

このメソッドは、Ubuntu 18.04でdlopenを使用して開かれたライブラリを この最小限のセットアップ でテストされ、sleep(1000)でハッキングされたライブラリも表示します。

Rootで次のコマンドを実行して、完全なリストを表示できます。

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

これは、lsofを持たないユーザー向けです。

5
Nobutarou