是什么LDD和objdump的区别?(What is the difference between

2019-06-26 08:32发布

我运行这两个命令,我得到不同的输出:

$ ldd `which ls`
    linux-gate.so.1 =>  (0x00db3000)
    libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0x00ba2000)
    librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x007bf000)
    libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0x004ce000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00398000)
    /lib/ld-linux.so.2 (0x00dea000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00a83000)
    libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0x00d3d000)

然后

objdump -x `which ls` | grep NEEDED
  NEEDED               libselinux.so.1
  NEEDED               librt.so.1
  NEEDED               libacl.so.1
  NEEDED               libc.so.6

那是怎么回事? 我认为他们俩给图书馆的依赖? 我在乎的原因是,我怀疑ldd是正确的,但我的工作在Linux on ARM,在没有从我可以告诉LDD ...

Answer 1:

你可以看到在输出的差异。

objdump的仅仅是倾销什么物体本身列出含有未解决的符号库。

LDD是上市的库ld.so实际上加载。 它遵循图形落后,这样就可以看到什么会被这些库被加载。 这是多么libpthread.so.0在LDD输出,卷起尽管在objdump的输出不是。

因此,LDD是要给的,真正需要在运行时使用一个好得多的画面。 但是,解决编译/链接时出现的问题时,objdump的是非常有帮助的。



Answer 2:

参见程序库HOWTO,部分3.5。 安装和使用共享库 :

请注意: 不要在你不信任的程序运行LDD。 如在LDD(1)手册清楚说明所示,LDD通过作品(在某些情况下)通过设置一个特殊的环境变量(ELF对象,LD_TRACE_LOADED_OBJECTS),然后执行该程序。 有可能对于不受信任的程序来强制LDD用户运行任意代码(而不是简单地表示LDD信息)。 所以,为了安全起见,请不要在你不信任的执行程序使用LDD。



文章来源: What is the difference between ldd and objdump?