質問

?私はシェルから与えられたバイナリを検査するreadelf -d <elf> | grep RPATHを使用することが可能であることを承知しているが、それはプロセス内でこれを行うことが可能です。

以下のような

何か(私の完全に構成されたシステムコール):

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

私は、私たちのコードベースで問題点を結ぶいくつかの容疑者SOを診断しようとしている、と(私はむしろ外部スクリプトを起動する必要はないと思います)可能であればRPATHをこのように検査したいと思います。

役に立ちましたか?

解決

#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;
}

他のヒント

レコードについて、ここでrpathヘッダーを表示するコマンドのカップルがあります。

objdump -x binary-or-library |grep RPATH

たぶん、それを行うためのより良い方法は次の通りである:

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

2番目のコマンドはまたrpath続く他のライブラリに直接依存関係を示しています。

また、使用することができます:

chrpath -l binary-or-library
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top