我知道,这是可以使用readelf -d <elf> | grep RPATH检查从壳给定的二元,但有可能成为进程中做到这一点?

喜欢的东西(我的完全由系统调用):

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

我试图诊断某些犯罪嫌疑人于是在我们的代码库链接问题,并想检查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

第二个命令还列出其他的库直接依赖随后rpath

您还可以使用:

chrpath -l binary-or-library
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top