2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下: LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、 LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的 dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
(1) export LD_TRACE_LOADED_OBJECTS=1
(2) 再执行任何的程序,如ls等,看看程序的运行结果
3、 ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld- linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。
4、实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(这相当于ldd program)
fdd是财务尽职调查(Financial Due-Diligence)的英文简称,又称“谨慎性调查”,一般是指投资人在与目标企业达成初步合作意向后,经协商一致,投资人对目标企业一切与本次投资有关的事项进行现场调查、资料分析的一系列活动。若企业需要进行上市发行,也需要事先进行尽职调查,以初步了解企业是否具备上市的条件。ldd命令用于输出程序或者库文件所依赖的共享库列表。
语法
选项
参数
文件:指定可执行程序或者文库。
ldd原理
首先,ldd不是一个可执行程序,而只是一个shell脚本。
ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下: LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIN_NOW、LD_LIBRARY_VERSION、LD_VERBOSE 等。当 LD_TRACE_LOADED_OBJECTS 环境变量不为空时,任何可执行程序在运行时,它都只会显示模块的dependency,而程序并不真正执行。测试结果如下:
ldd 显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。ld-linux.so模块会先于executable模块程序工作,并获得控制权。因此当上述的那些变量设置时,ld-linux.so选择了显示可执行模块的dependency。
ld-linux.so读取可执行程序的头信息,这些信息采用 Executable and Linking Format 或者(ELF)格式。 它们通过这些消息,来确定哪些库是必须的,以及哪些库需要加载。 然后执行动态链接,把可执行程序当中所有的地址指针与需要加载的库联系起来, 这样程序就可以运行了。
实际上可以直接执行ld-linux.so模块,如: /lib64/ld-linux-x86-64.so.2 --list ./a.out (这相当于 ldd a.out )。
示例
通过上面的信息,我们可以得到以下几个信息:
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)