什么是“共享可执行文件”?

什么是“共享可执行文件”?

斯蒂芬·基特写道https://unix.stackexchange.com/a/448943/674

ld.so是一个共享的 ELF 对象,但它不需要解释器(它没有 .interp 条目);这是库的典型特征(共享可执行文件总是需要解释器;否则它们是静态的,而不是动态的)。

当且仅当 ELF 目标文件具有条目时,它才是“共享可执行文件”吗 .interp

“共享可执行文件”是什么意思?它与“共享库”相同吗?

或者“共享可执行文件”意味着“部分链接的可执行文件”?在CSAPP中

linux> gcc -o prog2l main2.c ./libvector.so

这将创建一个可执行目标文件 prog2l,其形式可以在运行时与 libvector.so 链接。

...当加载器加载并运行可执行文件时,它使用第 7.9 节中讨论的技术prog2l加载部分链接的可执行文件。prog2l接下来,它注意到prog2l包含一个.interp部分,其中包含动态链接器的路径名,动态链接器本身就是一个共享对象(例如,ld-linux.so在Linux系统上)。

答案1

当且仅当 ELF 目标文件具有 .interp 条目时,它才是“共享可执行文件”吗?

严格来说不是,因为它也可以是共享库。但所有“共享可执行文件”(我指的是动态链接)都有一个解释器条目,无论其 ELF 类型(EXECDYN)如何。

“共享可执行文件”是什么意思?它与“共享库”相同吗?

不,这不一样;我应该写“动态链接的可执行文件”。

或者“共享可执行文件”意味着“部分链接的可执行文件”?

这是另一种说法。

相关内容