Как посмотреть загруженные в данный момент общие объекты в Linux?

34

У меня есть два связанных вопроса:

  • Как узнать, загружена ли общая библиотека в данный момент? (т.е. общесистемный, независимый от процесса)
  • Как я могу увидеть все общие библиотеки, загруженные процессом?
Максимум
источник

Ответы:

40

Вы можете сделать как с lsof. Чтобы увидеть, какие процессы имеют открытую или сопоставленную библиотеку:

lsof /path/to/lib.so

и чтобы увидеть, какие файлы (включая общие библиотеки) процесс открыл и / или отобразил, выполните:

lsof -p <pid>
TomH
источник
22

Другой способ увидеть, что загружено в процесс, - посмотреть на /proc/PID/mapsфайл. Это показывает все, что сопоставлено с вашим адресным пространством, включая общие объекты.

Рич Гомолка
источник
Хорошо работал на моей встроенной платформе ARM. В то время как реализация BusyBox lsofне имела необходимой функциональности.
Алекс Че
7
sudo grep libcairo.so /proc/*/maps

хороший способ изучить все /proc/PID/maps упомянутое Ричем сразу. Образец вывода:

/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 может улучшить вывод дальше.

Этот метод также показывает библиотеки, открытые с dlopenпомощью этой минимальной установки, взломанной с помощью sleep(1000)Ubuntu 18.04.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
4

Вы можете запустить следующую команду от имени пользователя root и увидеть полный список,

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

Это для пользователей, у которых нет lsof.

Nobutarou
источник
Почему вы хотите, чтобы пользователь попробовал это? Пожалуйста, отредактируйте свой ответ для лучшего понимания.
CaldeiraG