【发布时间】:2015-12-18 17:54:24
【问题描述】:
基本上,我想获取一个二进制文件可能加载的库列表。
我想出的不可靠方法似乎有效(可能会出现误报):
comm -13 <(ldd elf_file | sed 's|\s*\([^ ]*\)\s.*|\1|'| sort -u) <(strings -a elf_file | egrep '^(|.*/)lib[^:/]*\.so(|\.[0-9]+)$' | sort -u)
这不可靠。但它提供了有用的信息,即使二进制文件已被剥离。
是否有可靠的方法来获取此信息而不会出现误报?
编辑:更多上下文。
Firefox 正在从使用 gstreamer 过渡到使用 ffmpeg。
我想知道libavcodec.so 的哪些版本可以使用。
libxul.so 将dlopen() 用于许多可选功能。
并且库名称是硬编码的。所以,上面的命令有帮助
在这种情况下。
我对包管理和二进制依赖项也很感兴趣。
我知道您可以使用readelf -d 获得直接依赖关系,依赖关系
与ldd 的依赖关系。我想知道可选依赖项,因此问题。
【问题讨论】:
-
获得
dlopen()d 的库的名称不必出现在ldds 输出中。 -
如果我
dlopen(argv[i])怎么办?您将如何发现? -
另外,
dlopen()ed 模块的名称不必以“lib”开头。甚至,我猜,以“.so”结尾。 -
这是一个相当可靠的方法:
find / |xargs file |grep 'ELF .* shared object' -
@nwellnhof:如果动态下载共享对象会怎样? :-)