我知道可以用来readelf -d <elf> | grep RPATH从外壳检查给定的二进制文件,但是有可能在一个进程中执行此操作吗?
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; }