考虑的共享对象相关性/bin/bash
,其中包括/lib64/ld-linux-x86-64.so.2
(动态链接器/加载器):
ldd /bin/bash
linux-vdso.so.1 (0x00007fffd0887000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f57a04e3000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f57a04de000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f57a031d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f57a0652000)
检查/lib64/ld-linux-x86-64.so.2
表明它是与以下内容的符号链接/lib/x86_64-linux-gnu/ld-2.28.so
:
ls -la /lib64/ld-linux-x86-64.so.2
lrwxrwxrwx 1 root root 32 May 1 19:24 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.28.so
此外,file
报告/lib/x86_64-linux-gnu/ld-2.28.so
本身可以动态链接:
file -L /lib64/ld-linux-x86-64.so.2
/lib64/ld-linux-x86-64.so.2: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped
我想知道:
- 动态链接程序/加载程序(
/lib64/ld-linux-x86-64.so.2
)本身如何进行动态链接?它是否在运行时链接自身? /lib/x86_64-linux-gnu/ld-2.28.so
被记录为可以处理a.out二进制文件(man ld.so
),但是/bin/bash
ELF是可执行文件吗?
程序ld.so处理a.out二进制文件,这是很久以前使用的一种格式。ld-linux.so *(对于libc5是/lib/ld-linux.so.1,对于glibc2是/lib/ld-linux.so.2)处理着ELF,每个人都已经使用了多年。
/lib/x86_64-linux-gnu/ld-2.28.so
,debian 10 buster)
file
对有关如何定义静态二进制文件的错误评论与ld-2.28.so
... 的现实是混为一谈PT_DYNAMIC
。