2013-05-09 34 views
5

W systemie Linux mam aplikację C++, która używa dlopen() do ładowania niektórych bibliotek współużytkowanych, ale podejrzewam, że ładowana wersja udostępnianej biblioteki nie jest tą, której oczekuję, ponieważ mój kod śledzenia debugowania nie pojawia się do wykonania.Jak mogę sprawdzić uruchomiony proces, aby zobaczyć, z jakich bibliotek współdzielonych korzysta?

Czy istnieje sposób sprawdzenia uruchomionego procesu w celu wysłania zapytania do wszystkich bibliotek współdzielonych, które obecnie ma otwarty i ścieżkę do każdej z tych bibliotek? Innymi słowy, coś podobnego do ldd, ale działającego na uruchomionym pliku wykonywalnym, a także list bibliotek ładowanych w środowisku wykonawczym.

+1

spróbuj 'lsof -p _process_id_' – stardust

+3

K tutaj jest pełna odpowiedź. http://stackoverflow.com/questions/5103443/how-to-check-what-shared-library-is-loaded-at-run-time – stardust

Odpowiedz

7

Jeśli chcesz poznać pliki biblioteki, które program otworzył, możesz spróbować pmap. Na przykład, jeśli chcemy wiedzieć, że biblioteki Bash proces 3860 zostały otwarte, wynik mógłby być:

3860: bash 
08048000 880K r-x-- /bin/bash 
08124000  4K r---- /bin/bash 
08125000  20K rw--- /bin/bash 
0812a000  20K rw--- [ anon ] 
099ae000 348K rw--- [ anon ] 
b715c000  44K r-x-- /lib/i386-linux-gnu/libnss_files-2.15.so 
b7167000  4K r---- /lib/i386-linux-gnu/libnss_files-2.15.so 
b7168000  4K rw--- /lib/i386-linux-gnu/libnss_files-2.15.so 
b7169000  88K r-x-- /lib/i386-linux-gnu/libnsl-2.15.so 
b717f000  4K r---- /lib/i386-linux-gnu/libnsl-2.15.so 
b7180000  4K rw--- /lib/i386-linux-gnu/libnsl-2.15.so 
b7181000  8K rw--- [ anon ] 
b7183000  28K r-x-- /lib/i386-linux-gnu/libnss_compat-2.15.so 
b718a000  4K r---- /lib/i386-linux-gnu/libnss_compat-2.15.so 
b718b000  4K rw--- /lib/i386-linux-gnu/libnss_compat-2.15.so 
b71a1000  4K r---- /usr/lib/locale/locale-archive 
b71a2000 1428K r---- /usr/lib/locale/locale-archive 
b7307000 2048K r---- /usr/lib/locale/locale-archive 
b7507000  4K rw--- [ anon ] 
b7508000 1676K r-x-- /lib/i386-linux-gnu/libc-2.15.so 
b76ab000  8K r---- /lib/i386-linux-gnu/libc-2.15.so 
b76ad000  4K rw--- /lib/i386-linux-gnu/libc-2.15.so 
b76ae000  16K rw--- [ anon ] 
b76b2000  12K r-x-- /lib/i386-linux-gnu/libdl-2.15.so 
b76b5000  4K r---- /lib/i386-linux-gnu/libdl-2.15.so 
b76b6000  4K rw--- /lib/i386-linux-gnu/libdl-2.15.so 
b76b7000 112K r-x-- /lib/i386-linux-gnu/libtinfo.so.5.9 
b76d3000  8K r---- /lib/i386-linux-gnu/libtinfo.so.5.9 
b76d5000  4K rw--- /lib/i386-linux-gnu/libtinfo.so.5.9 
b76d8000  28K r--s- /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache 
b76df000  40K r-x-- /lib/i386-linux-gnu/libnss_nis-2.15.so 
b76e9000  4K r---- /lib/i386-linux-gnu/libnss_nis-2.15.so 
b76ea000  4K rw--- /lib/i386-linux-gnu/libnss_nis-2.15.so 
b76eb000  8K rw--- [ anon ] 
b76ed000  4K r-x-- [ anon ] 
b76ee000 128K r-x-- /lib/i386-linux-gnu/ld-2.15.so 
b770e000  4K r---- /lib/i386-linux-gnu/ld-2.15.so 
b770f000  4K rw--- /lib/i386-linux-gnu/ld-2.15.so 
bfbbf000 132K rw--- [ stack ] 
total  7152K 

Szkoda byłoby pomocne dla Ciebie.

+0

Musiał uruchomić program przez GDB, aby utrzymać go przy życiu wystarczająco długo, ale pmap wykonuje pracę. Dzięki! – dhardy