В настоящее время я пытаюсь написать свою собственную программу, отражающую команду pmap, особенно в Solaris 9. У меня возникают проблемы с определением имен и путей к библиотекам. Вывод команды Solaris в оболочке bash выглядит примерно так:
bash-2.05# pmap $$
2427: bash
00010000 496K r-x-- /usr/bin/bash
0009A000 80K rwx-- /usr/bin/bash
000AE000 120K rwx-- [ heap ]
FF100000 688K r-x-- /usr/lib/libc.so.1
FF1BC000 24K rwx-- /usr/lib/libc.so.1
FF1C2000 8K rwx-- /usr/lib/libc.so.1
FF200000 568K r-x-- /usr/lib/libnsl.so.1
FF29E000 32K rwx-- /usr/lib/libnsl.so.1
FF2A6000 32K rwx-- /usr/lib/libnsl.so.1
FF2F0000 8K rwx-- [ anon ]
FF300000 16K r-x-- /usr/lib/libmp.so.2
FF314000 8K rwx-- /usr/lib/libmp.so.2
FF320000 8K r-x-- /usr/platform/sun4u-us3/lib/libc_psr.so.1
FF330000 40K r-x-- /usr/lib/libsocket.so.1
FF34A000 8K rwx-- /usr/lib/libsocket.so.1
FF350000 168K r-x-- /usr/lib/libcurses.so.1
FF38A000 32K rwx-- /usr/lib/libcurses.so.1
FF392000 8K rwx-- /usr/lib/libcurses.so.1
FF3A0000 8K r-x-- /usr/lib/libdl.so.1
FF3B0000 8K rwx-- [ anon ]
FF3C0000 152K r-x-- /usr/lib/ld.so.1
FF3F6000 8K rwx-- /usr/lib/ld.so.1
FFBFC000 16K rw--- [ stack ]
total 2536K
В основном я могу воспроизвести основные функции программы, прочитав /proc/$$/map, но осталось выяснить, как разрешать имена библиотек, показанные справа. /proc/$$/map дает только имена файлов в /proc/$$/object, которые являются просто общими именами. В Solaris 10 (ящик, который у меня есть) я, похоже, могу использовать /proc/$$/path, который содержит символические ссылки, но в ящике, над которым я работаю, их нет. Есть ли у кого-нибудь простые идеи о том, как получить эти имена библиотек? Когда я запускаю программу, кажется, что она открывает /proc/$$/as и просматривает память и каким-то образом находит их, но я пока не могу понять, где она ищет и почему.