1

Android /Linuxでプロセスのフル パスを取得するための /proc/PID/exe シンボリック リンクを読み取る別の方法を探しています。

その理由は、Android では、自分自身または「自分自身」以外のプロセスの /proc/PID/exe へのアクセスが制限されている (許可が拒否されている) ように見えるためです。

私は以下も調べました-それらは読み取り可能ですが、機能していないようです:

  • /proc/PID/cmdline: フルパスが含まれることはめったにありません
  • /proc/PID/stat: 実行可能ファイル名のみが含まれます (パスなし)

許可が拒否されたために失敗したコード:

#include <unistd.h>
// ...
char buf[2048];
// "/proc/1234/exe" is of course replaced with a proper PID
ssizet_t len = readlink("/proc/1234/exe", buf, sizeof(buf) - 1);
if(-1 != len) {
  buf[len] = '\0';
  // buf should contain full path
} else {
  // this path always reached for PID's other than my own or
  // /proc/self/exe
}

別の方法が必要ですか?Windows には、もちろん GetModuleFileNameEx や QueryFullProcessImageName() などがあります。

4

1 に答える 1

2

情報を取得できる場所は他にもありますが/proc/<pid>/maps、アクセスが許可されていない/proc/<pid>/exe場合は、それらにもアクセスできません。

これは、各アプリに独自の UID が割り当てられる Android のセキュリティ モデルの結果です。

于 2010-09-15T04:52:53.120 に答える