有没有一种编程方式来检查 Linux 上当前的 rpath?
- 2024-10-22 08:29:00
- admin 原创
- 65
问题描述:
我知道可以readelf -d <elf> | grep RPATH
从 shell 中检查给定的二进制文件,但是可以在进程内执行此操作吗?
类似于(我完全编造的系统调用):
/* get a copy of current rpath into buffer */
sys_get_current_rpath(&buffer);
我正在尝试诊断我们代码库中的一些可疑的 SO 链接问题,并且如果可能的话,想以这种方式检查 RPATH(我宁愿不必生成外部脚本)。
解决方案 1:
为了记录,这里有几个将显示rpath
/runpath
标题的命令。
objdump -x binary-or-library |grep 'R.*PATH'
也许更好的方法是:
readelf -d binary-or-library |head -20
第二条命令还列出了对其他库的直接依赖关系,后跟rpath
。
解决方案 2:
问题具体是关于 的RPATH
,但现代链接器改用RUNPATH
。请参阅此答案- 两者之间存在细微的语义差异。
答案已更新,可以打印。
#include <assert.h>
#include <stdio.h>
#include <elf.h>
#include <link.h>
int main()
{
const ElfW(Dyn) *dyn = _DYNAMIC;
const ElfW(Dyn) *rpath = NULL;
const ElfW(Dyn) *runpath = 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_RUNPATH) {
runpath = dyn;
} else if (dyn->d_tag == DT_STRTAB) {
strtab = (const char *)dyn->d_un.d_val;
}
}
assert(strtab != NULL);
if (rpath != NULL) {
printf("RPATH: %s
", strtab + rpath->d_un.d_val);
} else if (runpath != NULL) {
printf("RUNPATH: %s
", strtab + runpath->d_un.d_val);
}
return 0;
}
解决方案 3:
您还可以使用:
chrpath -l binary-or-library
解决方案 4:
为了方便起见,我使用以下 shell 函数:
function getrpath {
eu-readelf -d "${1:?}" | sed -e '/RUNPATH/{s~.*[(.*)]~~;n};d'
}
这将消耗如下eu-readelf
输出elfutils
:
Type Value
NEEDED Shared library: [libpq.so.5]
NEEDED Shared library: [libc.so.6]
RUNPATH Library runpath: [/some/path/to/lib]
....
并发出
/some/path/to/lib
readelf
它也可以与 binutils而不是 elfutils配合使用eu-readelf
。
解决方案 5:
如果你有patchelf,它还可以以漂亮的格式打印 rpath:
> patchelf --print-rpath /path/to/elf
$ORIGIN:$ORIGIN/../../lib
解决方案 6:
有一种方法。按照man dlinfo
[1] 中的示例代码,但用作NULL
的第一个参数dlopen()
。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD