gpt4 book ai didi

c - 检索库运行时

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:02 24 4
gpt4 key购买 nike

我在谷歌上搜索了很多都没有成功。

如果可能的话,我需要的是一种检索进程使用哪些动态库的运行时的方法。

我知道ldd , 但我正在寻找一个 c 编码的解决方案。

目标是让进程在启动时检索有关库的信息并将它们发送到能够存储和显示我的进程使用的所有库的信息进程。

编辑请注意,我正在开发一个嵌入式系统,它必须尽可能少(以 RootFS 占用空间而言)。

最佳答案

您想通过程序解析 elf-header。好的,最后您将获得仅分析的 elf 文件所需依赖项的列表,例如(readelf -d 输出):

 0x00000001 (NEEDED)     Shared library: [libcurl.so.4]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [librt.so.1]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]

然后您应该递归地解析每个找到的库以获取它们的依赖项。这会强制为每个库找到完整路径。为此,您应该处理库的搜索路径:内置 ld.so 和环境变量 LD_LIBRARY_PATH。在带有特殊变量的elf结构中也可以出现RPATH字段(优先级更高的搜索路径),例如:

0x0000000f (RPATH) Library rpath: [/usr/lib:/usr/lib/i386-linux-gnu:$ORIGIN]

ldd 是 bash 脚本,有很多例程和注释,因此如果需要可以将其剥离到最小尺寸。通常情况下,它会调用带有设置变量 LD_TRACE_LOADED_OBJECTS 的 ld.so(标准动态链接器)。就这些。所以解析 ldd 输出很舒服。

关于c - 检索库运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34018954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com