linux中如何查看so或可执行程序的依赖库

2023-04-18 08:38:00 执行 依赖 或可

在Linux中,可以使用ldd命令来查看so或可执行程序的依赖库。ldd命令是一个用于查看动态链接库的工具,它可以查看可执行文件和共享库之间的依赖关系。

ldd命令的使用方法很简单,只需要在终端输入ldd可执行文件或共享库的路径,就可以查看其依赖的库。例如,如果要查看/usr/bin/ls的依赖库,可以在终端输入:

ldd /usr/bin/ls

查看结果如下:

linux-vdso.so.1 =>  (0x00007ffd9a3a1000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f6f7d6d3000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6f7d303000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f6f7d046000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6f7ce41000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6f7da9d000)

从上面的结果可以看出,ls命令依赖的库有linux-vdso.so.1、libselinux.so.1、libc.so.6、libpcre.so.3、libdl.so.2、/lib64/ld-linux-x86-64.so.2。

除了ldd命令,还可以使用readelf命令来查看so或可执行程序的依赖库。readelf命令是一个用于查看ELF文件内容的工具,它可以查看ELF文件的头部信息、程序段、符号表、动态链接库等内容。

使用readelf命令查看so或可执行程序的依赖库,只需要在终端输入:

readelf -d 可执行文件或共享库的路径

例如,如果要查看/usr/bin/ls的依赖库,可以在终端输入:

readelf -d /usr/bin/ls

查看结果如下:

Dynamic section at offset 0x2f8 contains 25 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libselinux.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000e (SONAME)             Library soname: [libselinux.so.1]
 0x000000000000000e (SONAME)             Library soname: [libc.so.6]
 0x000000000000000f (RPATH)              Library rpath: [/usr/lib/gcc/x86_64-linux-gnu/7]
 0x0000000000000010 (SYMBOLIC)           0x0
 0x0000000000000011 (REL)                0x208
 0x0000000000000012 (RELSZ)              16 (bytes)
 0x0000000000000013 (RELENT)             8 (bytes)
 0x0000000000000014 (PLTREL)             REL
 0x0000000000000017 (JMPREL)             0x220
 0x0000000000000019 (INIT)               0x40c0
 0x000000000000001b (INIT_ARRAY)         0x601020
 0x000000000000001c (FINI_ARRAY)         0x601028
 0x000000000000001d (INIT_ARRAYSZ)       8 (bytes)
 0x000000000000001e (FINI_ARRAYSZ)       8 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0x2c8
 0x000000006ffffffb (VERNEED)            0x2f0
 0x000000006ffffffe (VERNEEDNUM)         1
 0x000000006fffffff (VERSYM)             0x2e8
 0x000000006ffffff0 (FLAGS)              BIND_NOW
 0x000000006ffffff9 (RELACOUNT)          0
 0x0000000000000000 (NULL)               0x0

从上面的结果可以看出,ls命令依赖的库有libselinux.so.1、libc.so.6。

总之,在Linux中,可以使用ldd命令和readelf命令来查看so或可执行程序的依赖库,这样可以方便地查看可执行文件和共享库之间的依赖关系,从而帮助我们更好地管理和维护系统。

相关文章