Linux链接器中'ldd'命令输出中的'=>'符号是什么意思?

goucqfw6  于 2023-05-28  发布在  Linux
关注(0)|答案(1)|浏览(188)

当我运行'ldd some_executable_file'时,它显示了此exe所需的依赖项,如“libm.so.6 => /usr/lib 64/libm.so.6(0x 00007 ff 2 eaf 52000)"。虽然列表中的一些依赖项以“some_absoulute_path/ld-linux-x86-64.so.2 => /lib 64/ld-linux-x86-64.so.2(0x 00007 ff 2 eba 92000)”的形式出现,但似乎左侧文件并不指向右侧文件
根据一些测试,左边的文件被选为依赖路径,而右边的文件没有,那么符号“=>”是什么意思呢?

yr9zkbsy

yr9zkbsy1#

问题是ldd的输出是误导性的(至少对于不使用系统ld-linux的二进制文件来说是这样)。
大约10年前,ldd使用了“嵌入”二进制文件的 actual 程序解释器(这里是some_absoulute_path/ld-linux-x86-64.so.2)。
然而,这被认为是一个安全风险,因为root用户可能会运行ldd some-foreign-binary,这将导致“baked in interpreter”以root用户身份运行,这不一定是系统管理员所期望的。
所以现在ldd使用 systemld-linux,而不管“baked in”解释器,这导致了这里的“错误”输出:

some_absoulute_path/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 ...

如果你真的要运行这个二进制文件,它不会使用/lib64/ld-linux-x86-64.so.2;它将使用实际的“内置”解释器some_absoulute_path/ld-linux-x86-64.so.2
要获得 * 准确 * 的ldd结果,您应该运行与some_absoulute_path/ld-linux-x86-64.so.2匹配的ldd。这里可能是/opt/compiler/gcc-8.2/bin/ldd

相关问题