99

readelf -d <elf> | grep RPATHシェルから特定のバイナリを検査するために使用できることは承知していますが、プロセス内でこれを行うことは可能ですか?

次のようなもの(私の完全に構成されたシステムコール):

  /* get a copy of current rpath into buffer */
  sys_get_current_rpath(&buffer);

私たちのコードベースで疑わしい SO リンクの問題を診断しようとしています。可能であれば、この方法で RPATH を検査したいと考えています (外部スクリプトを生成する必要はありません)。

4

5 に答える 5

170

rpath記録として、ヘッダーを表示するコマンドをいくつか示します。

objdump -x binary-or-library |grep RPATH

おそらく、それを行うためのさらに良い方法は次のとおりです。

readelf -d binary-or-library |head -20

2 番目のコマンドは、他のライブラリへの直接の依存関係も一覧表示し、その後にrpath.

于 2011-06-14T18:39:35.363 に答える
61
#include <stdio.h>
#include <elf.h>
#include <link.h>

int main()
{
  const ElfW(Dyn) *dyn = _DYNAMIC;
  const ElfW(Dyn) *rpath = NULL;
  const char *strtab = NULL;
  for (; dyn->d_tag != DT_NULL; ++dyn) {
    if (dyn->d_tag == DT_RPATH) {
      rpath = dyn;
    } else if (dyn->d_tag == DT_STRTAB) {
      strtab = (const char *)dyn->d_un.d_val;
    }
  }

  if (strtab != NULL && rpath != NULL) {
    printf("RPATH: %s\n", strtab + rpath->d_un.d_val);
  }
  return 0;
}
于 2010-05-17T04:52:15.243 に答える
16

以下も使用できます。

chrpath -l binary-or-library
于 2018-08-02T12:28:57.757 に答える