我知道可以使用readelf -d <elf> | grep RPATH
从shell中检查给定的二进制文件,但是在进程中这样做是可能的吗?
类似于(我完全虚构的系统调用):
/* get a copy of current rpath into buffer */
sys_get_current_rpath(&buffer);
我正在尝试在我们的代码库中诊断一些可疑的链接问题,如果可能的话,我想以这种方式检查RPATH (我不希望产生外部脚本)。
发布于 2010-05-17 12:52:15
#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;
}
发布于 2011-06-15 02:39:35
根据记录,这里有几个命令将显示rpath
标头。
objdump -x binary-or-library |grep RPATH
也许更好的方法是这样做:
readelf -d binary-or-library |head -20
第二个命令还列出了对其他库的直接依赖关系,后面是rpath
。
发布于 2018-08-02 20:28:58
您还可以使用:
chrpath -l binary-or-library
https://stackoverflow.com/questions/2836330
复制相似问题