What is the difference between ldd and objdump?

前端 未结 2 1170
南笙
南笙 2020-12-28 17:03

I am running these two commands, and I\'m getting different output:

$ ldd `which ls`
    linux-gate.so.1 =>  (0x00db3000)
    libselinux.so.1 => /lib/i         


        
相关标签:
2条回答
  • 2020-12-28 17:14

    You can see the difference in the output.

    objdump is simply dumping what the object itself lists as libraries containing unresolved symbols.

    ldd is listing which libraries ld.so would actually load. And it follows the graph backward, so that you can see what would be loaded by those libraries. Which is how libpthread.so.0 winds up in the ldd output, despite not being in the objdump output.

    So ldd is going to give a much, much better picture of what really needs to be available at runtime. But, when resolving compile/link-time problems, objdump is pretty helpful.

    0 讨论(0)
  • 2020-12-28 17:30

    See Program Library HOWTO, section 3.5. Installing and Using a Shared Library:

    Beware: do not run ldd on a program you don't trust. As is clearly stated in the ldd(1) manual, ldd works by (in certain cases) by setting a special environment variable (for ELF objects, LD_TRACE_LOADED_OBJECTS) and then executing the program. It may be possible for an untrusted program to force the ldd user to run arbitrary code (instead of simply showing the ldd information). So, for safety's sake, don't use ldd on programs you don't trust to execute.

    0 讨论(0)
提交回复
热议问题