É ld.so um executável?

0
$ 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 linker / loader dinâmico e mencionado na seção 8 do manual . Então, é um executável?

Se sim, por que é nomeado como uma biblioteca compartilhada como *.so ?

Se não, como devo entender é como um executável, por ser um linker / loader dinâmico e mencionado na seção 8 do manual?

Obrigado.

    
por Tim 10.06.2018 / 14:19

1 resposta

3

São ambos que são perfeitamente válidos .

O esquema de nomenclatura no estilo ld.so é amplamente histórico; o primeiro vinculador dinâmico nesse estilo foi o SunOS 4, que recebeu o nome ld.so (tenho sua história em algum lugar, vou esclarecer isso depois que o encontrar). Mas existem razões válidas para que seja nomeado como uma biblioteca compartilhada em vez de um executável, incluindo:

  • existe para servir executáveis, como bibliotecas compartilhadas (não tem propósito sem executar executáveis);
  • é um objeto ELF compartilhado, mas não exige um intérprete (não tem .interp entry); isso é típico das bibliotecas (os executáveis compartilhados sempre exigem um intérprete; caso contrário, eles são estáticos, não dinâmicos).

A distinção entre executáveis e bibliotecas é um tanto fluida no ELF; qualquer objeto ELF com um ponto de entrada pode ser um executável, independentemente de suas outras propriedades.

    
por 10.06.2018 / 14:53

Tags