ELF:转储二进制导入的 .so 文件的路径

ELF:转储二进制导入的 .so 文件的路径

我正在尝试转储由 ELF 文件导入的共享库的完整路径 ( /usr/bin/ls)

使用readelf --dyn-syms /usr/bin/ls我可以获取库的名称,但不能获取它们在文件系统上的位置:

101: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND [...]@LIBSELINUX_1.0 (4)

使用objdump -T /usr/bin/ls我可以获得更多信息(包括函数名称):

0000000000000000      DF *UND*  0000000000000000 (LIBSELINUX_1.0) getfilecon

这是有用的信息,但如何提取该库在磁盘上的位置?我可以运行该文件并查看它通过打开的内容lsof,但是有没有办法在不运行该文件的情况下执行此操作?

答案1

这是ldd为了:

$ ldd /bin/ls
    linux-vdso.so.1 (0x00007ffd67705000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f25aaab6000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f25aa8f1000)
    libpcre2-8.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f25aa859000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f25aa853000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f25aab52000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f25aa831000)

这可能包含比 所示的库更多的内容readelf,因为它也会处理传递依赖项。

相关内容