Load

ld.so 是執行檔嗎?

  • September 28, 2020
$ file /lib/ld-linux.so.2
/lib/ld-linux.so.2: symbolic link to i386-linux-gnu/ld-2.27.so
$ readlink -f /lib/ld-linux.so.2
/lib/i386-linux-gnu/ld-2.27.so
$ file /lib/i386-linux-gnu/ld-2.27.so
/lib/i386-linux-gnu/ld-2.27.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=7a59ed1836f27b66ffd391d656da6435055f02f8, stripped

ld-2.27.so 共享庫也是如此嗎?

據說它是一個動態連結器/載入器,並在 man 的第 8 節中提到。那麼它是執行檔嗎?

如果是,為什麼它被命名為共享庫*.so

如果不是,我該如何理解它就像一個執行檔,作為一個動態連結器/載入器,並在 man 的第 8 節中提到?

謝謝。

兩者都是,這是完全有效的。

-ld.so風格的命名方案很大程度上是歷史性的;這種風格的第一個動態連結器是 SunOS 4,它被命名為ld.so(我在某處有它的歷史,一旦我找到它,我會澄清這一點)。但是有正當理由將其命名為共享庫而不是執行檔,包括:

  • 它的存在是為了提供執行檔,如共享庫(沒有執行檔執行它沒有任何目的);
  • 它是一個共享的 ELF 對象,但它不需要解釋器(它沒有.interp條目);這是典型的庫(共享,或者更確切地說是動態連結的執行檔總是需要解釋器;否則它們是靜態連結的)。

執行檔和庫之間的區別在 ELF 中有些模糊。任何具有入口點和/或解釋器的 ELF 對像都可以是執行檔,而不管其其他屬性如何。

引用自:https://unix.stackexchange.com/questions/448937