現在、特に Solaris 9 で、pmap コマンドをミラーリングする独自のプログラムを作成しようとしています。ライブラリの名前とパスを解決するのに問題があります。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 が開き、メモリを調べて何とか見つけたようですが、どこを見ているのか、その理由はまだわかりません。