2019-04-21 11:50:48 +08:00

24 lines
2.0 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<h1 id="ldd">ldd</h1>
<p>打印程序或者库文件所依赖的共享库列表</p>
<h2 id="补充说明">补充说明</h2>
<p><strong>ldd命令</strong> 用于打印程序或者库文件所依赖的共享库列表。</p>
<h3 id="语法">语法</h3>
<pre><code class="language-bash">ldd(选项)(参数)</code></pre>
<h3 id="选项">选项</h3>
<pre><code class="language-bash">--version打印指令版本号
-v详细信息模式打印所有相关信息
-u打印未使用的直接依赖
-d执行重定位和报告任何丢失的对象
-r执行数据对象和函数的重定位并且报告任何丢失的对象和函数
--help显示帮助信息。</code></pre>
<h3 id="参数">参数</h3>
<p>文件:指定可执行程序或者文库。</p>
<h3 id="其他介绍">其他介绍</h3>
<p>首先ldd不是一个可执行程序而只是一个shell脚本</p>
<p>ldd能够显示可执行模块的dependency其原理是通过设置一系列的环境变量如下<code>LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE</code>等。当<code>LD_TRACE_LOADED_OBJECTS</code>环境变量不为空时任何可执行程序在运行时它都会只显示模块的dependency而程序并不真正执行。要不你可以在shell终端测试一下如下</p>
<pre><code class="language-bash">export LD_TRACE_LOADED_OBJECTS=1</code></pre>
<p>再执行任何的程序如ls等看看程序的运行结果。</p>
<p>ldd显示可执行模块的dependency的工作原理其实质是通过ld-linux.soelf动态库的装载器来实现的。我们知道ld-linux.so模块会先于executable模块程序工作并获得控制权因此当上述的那些环境变量被设置时ld-linux.so选择了显示可执行模块的dependency。</p>
<p>实际上可以直接执行ld-linux.so模块<code>/lib/ld-linux.so.2 --list program</code>这相当于ldd program</p>
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->