2013年5月14日 星期二

如何知道程式所需要連結的函式庫

方法一:使用 ldd

$ ldd /usr/bin/python


linux-gate.so.1 =>  (0x007c4000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00d4c000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00755000)
libutil.so.1 => /lib/i386-linux-gnu/libutil.so.1 (0x00bea000)
libssl.so.1.0.0 => /lib/i386-linux-gnu/libssl.so.1.0.0 (0x00abb000)
libcrypto.so.1.0.0 => /lib/i386-linux-gnu/libcrypto.so.1.0.0 (0x00dfc000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00110000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x002e3000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x0030d000)
/lib/ld-linux.so.2 (0x00160000)

方法二:使用 lsof -P -T -p <Application_PID>

$ lsof -P -T -p 2047


方法三:使用 objdump -p

$ objdump -p /usr/bin/python

Dynamic Section:
  NEEDED               libpthread.so.0
  NEEDED               libdl.so.2
  NEEDED               libutil.so.1
  NEEDED               libssl.so.1.0.0
  NEEDED               libcrypto.so.1.0.0
  NEEDED               libz.so.1
  NEEDED               libm.so.6
  NEEDED               libc.so.6
  INIT                 0x08059cd4
  FINI                 0x08177ffc
  GNU_HASH             0x080481ac
  STRTAB               0x08051374
  SYMTAB               0x0804a9d4
  STRSZ                0x00006d63
  SYMENT               0x00000010
  DEBUG                0x00000000
  PLTGOT               0x0826bff4
  PLTRELSZ             0x00000cf0
  PLTREL               0x00000011
  JMPREL               0x08058fe4
  REL                  0x08058fbc
  RELSZ                0x00000028
  RELENT               0x00000008
  VERNEED              0x08058e0c
  VERNEEDNUM           0x00000008
  VERSYM               0x080580d8

如果在 ARM 的平台上,使用 objdump -p 是比較快的方式。

沒有留言:

張貼留言