斯蒂芬·基特写道https://unix.stackexchange.com/a/448943
任何具有入口点的 ELF 对象都可以是可执行文件,无论其其他属性如何。
并且ld.so
既是可执行文件(因为有入口点)又是共享库。
ELF目标文件成为共享库的充要条件是什么?
ELF目标文件成为可重定位目标文件的充分必要条件是什么?
下面的引用说共享库是一个可重定位的目标文件。
可执行文件也是可重定位目标文件吗?
可执行文件是共享库吗?
7.3 目标文件
目标文件有三种形式:
可重定位目标文件。包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件组合以创建可执行目标文件。
可执行目标文件。包含可以直接复制到内存并执行的形式的二进制代码和数据。
共享目标文件。一种特殊类型的可重定位目标文件可以在加载时或运行时加载到内存中并动态链接。
答案1
ELF目标文件成为共享库的充要条件是什么?
属于ELF类型DYN
。为了发挥作用,它还应该导出构成库 ABI 的符号。
ELF目标文件成为可重定位目标文件的充分必要条件是什么?
属于ELF类型REL
。这意味着它的代码是可重定位的,并且它包含一个重定位表。
可执行文件也是可重定位目标文件吗?
可执行文件可以重定位,但它们不是REL
文件。
可执行文件是共享库吗?
它们可以是,但大多数不是。但请注意,许多可执行文件都是 ELF 类型DYN
,即使它们不打算用作共享库。这表明它们是与位置无关的可执行文件(请参阅 参考资料DT_FLAGS_1
)。