Is there a way to inspect the current rpath on Linux?

柔情痞子 提交于 2019-11-26 10:19:55

问题


I\'m aware that it is possible to use readelf -d <elf> | grep RPATH to inspect a given binary from the shell, but is it possible to do this within a process?

Something like (my completely made up system call):

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

I\'m trying to diagnose some suspect SO linking issues in our codebase, and would like to inspect the RPATH this way if possible (I\'d rather not have to spawn an external script).


回答1:


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



回答2:


For the record, here are a couple of commands that will show the rpath header.

objdump -x binary-or-library |grep RPATH

Maybe an even better way to do it is the following:

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

The second command also lists the direct dependencies on other libraries followed by rpath.




回答3:


You can also use:

chrpath -l binary-or-library


来源:https://stackoverflow.com/questions/2836330/is-there-a-way-to-inspect-the-current-rpath-on-linux

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!