GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memeriksa pustaka bersama apa yang dimuat saat dijalankan untuk proses tertentu?

Sebenarnya, Anda dapat melakukannya di kode Anda dengan cara berikut:

#include <link.h>

using UnknownStruct = struct unknown_struct {
   void*  pointers[3];
   struct unknown_struct* ptr;
};
using LinkMap = struct link_map;

auto* handle = dlopen(NULL, RTLD_NOW);
auto* p = reinterpret_cast<UnknownStruct*>(handle)->ptr;
auto* map = reinterpret_cast<LinkMap*>(p->ptr);

while (map) {
  std::cout << map->l_name << std::endl;
  // do something with |map| like with handle, returned by |dlopen()|.
  map = map->l_next;
}

link_map struktur berisi setidaknya alamat dasar dan nama file absolut. Ini adalah struktur yang sebenarnya dikembalikan oleh dlopen() dengan argumen pertama non-NULL. Untuk detail selengkapnya, lihat di sini.


Orang lain berada di jalur yang benar. Berikut adalah beberapa cara.

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

Atau, dengan strace:

strace CMD.... 2>&1 | grep -E '^open(at)?\(.*\.so'

Keduanya mengasumsikan bahwa pustaka bersama memiliki ".so" di suatu tempat di jalurnya, tetapi Anda dapat mengubahnya. Yang pertama memberikan hasil yang cukup cantik hanya sebagai daftar pustaka, satu per baris. Yang kedua akan terus mencantumkan perpustakaan saat dibuka, jadi itu bagus.

Dan tentu saja lsof ...

lsof -p NNNN | awk '{print $9}' | grep '\.so'

Mungkin lsof - pisau swiss army dari linux akan membantu?

edit:untuk menjalankan, lsof -p <pid> , mencantumkan semua jenis informasi yang berguna, misalnya, jika prosesnya adalah java, daftarkan semua stoples yang terbuka - sangat keren...


Linux
  1. Periksa Proses Jika Sama Sedang Berjalan?

  2. Setara dengan “yang mana” untuk Pustaka Bersama?

  3. Bagaimana Cara Memeriksa Sinyal Apa yang Didengarkan oleh Proses?

  1. Periksa Berapa Lama Skrip Bash Dijalankan Dengan Perintah Waktu

  2. Bagaimana menjalankan proses Rsync di latar belakang

  3. Untuk apa file .la libtool?

  1. Bagaimana cara mengetahui semua simbol yang diekspor dari objek bersama?

  2. Periksa batas FD terbuka untuk proses tertentu di Linux

  3. Bagaimana cara menjadwalkan tcpdump agar berjalan untuk jangka waktu tertentu?