$ 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
Então é ld-2.27.so
uma biblioteca compartilhada?
Diz-se que é um vinculador/carregador dinâmico e mencionado na seção 8 de man . Então é um executável?
Se sim, por que é nomeado como uma biblioteca compartilhada como *.so
?
Se não, como devo entender que é como um executável, por ser um vinculador/carregador dinâmico e mencionado na seção 8 do man?
Obrigado.
É ambos, o que é perfeitamente válido .
O
ld.so
esquema de nomenclatura -style é amplamente histórico; o primeiro vinculador dinâmico nesse estilo foi o do SunOS 4, que foi nomeadold.so
(tenho sua história em algum lugar, esclarecerei isso assim que o encontrar). Mas há razões válidas para que ele seja nomeado como uma biblioteca compartilhada em vez de um executável, incluindo:.interp
entrada); isso é típico de bibliotecas (os executáveis compartilhados, ou melhor, vinculados dinamicamente, sempre exigem um interpretador; caso contrário, eles são vinculados estaticamente).A distinção entre executáveis e bibliotecas é um tanto fluida no ELF; qualquer objeto ELF com um ponto de entrada e/ou um interpretador pode ser um executável, independentemente de suas outras propriedades.