1. ホーム
  2. linux

[解決済み] Linuxで現在のrpathを検査するプログラム的な方法はありますか?

2022-12-10 04:34:27

質問

を使用することが可能であることは承知しています。 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;
}