5

Linux および Solaris でバイナリによってリンクされている共有ライブラリのリストをプログラムで取得したいと考えています。現在、私は pmap にシェルアウトしています ( ldddlopen されたライブラリが含まれていないため、バイナリでは使用できず、plddSolaris のみであるため使用できません):

std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");

これは少しハックですが、Solaris と Linux の両方で機能します (pmap の出力は少し異なりますが、必要な情報は常に最後の列にあります)。砲撃せずに同じ情報を取得する方法はありますか? それは両方のプラットフォームで動作しますか? ファイルのフォーマットは/proc/$PIDファイル間で異なると思いますが、それらを解析するためのヘッダーが通常どこにあるのかわかりません (共通の場所がある場合)。

4

1 に答える 1

2

プロセス IDを指定pmap 1234してコマンドを使用できます。1234

プログラム内から、より簡単な方法 (Linux 固有) は、/proc/self/mapsファイルを読み取って解析することです。

実行してみてください

cat /proc/self/maps

catLinux の場合:上記のコマンドを実行しているプロセスのメモリ マッピングが表示されます。

また、正確なポインターがあれば、dladdr(GNU/Linux または Glibc 固有の関数) を使用して、それが含まれている動的ライブラリーに関する情報を取得できます。

于 2011-10-26T20:50:49.783 に答える