O que é o /lib64/ld-linux-x86-64.so.2 e por que pode ser usado para executar o arquivo?

17

Recentemente, aprendi um truque: se um arquivo não possui permissões executáveis, podemos executá-lo usando /lib64/ld-linux-x86-64.so.2.

Por exemplo, para restaurar a permissão x para

-rw-r--r-- 1 root root 59K Mar  1  2017 /bin/chmod

nós podemos correr

/lib64/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod

Eu realmente não sei como isso pode ser feito, não é algo normal, tipo de mistério.

Reserva Federal
fonte

Respostas:

18

Esse é o vinculador dinâmico; se você executá-lo por conta própria, ele informará o que faz:

Uso: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]

Você invocou 'ld.so', o programa auxiliar para executáveis ​​da biblioteca compartilhada. Esse programa geralmente vive no arquivo /lib/ld.soe diretivas especiais em arquivos executáveis ​​usando bibliotecas compartilhadas ELF dizem ao carregador de programas do sistema para carregar o programa auxiliar a partir desse arquivo. Esse programa auxiliar carrega as bibliotecas compartilhadas necessárias ao executável do programa, prepara o programa para ser executado e o executa. Você pode chamar esse programa auxiliar diretamente da linha de comando para carregar e executar um arquivo executável ELF; isso é como executar o próprio arquivo, mas sempre usa esse programa auxiliar no arquivo especificado, em vez do arquivo de programa auxiliar especificado no arquivo executável que você executa. Isso é útil principalmente para os mantenedores para testar novas versões deste programa auxiliar; é provável que você não tenha a intenção de executar este programa.

O vinculador é usado para executar programas vinculados dinamicamente. Quando você executa chmod, o kernel é executado efetivamente /lib64/ld-linux-x86-64.so.2 chmod, como você fez manualmente; o último funciona mesmo que o chmodbinário não seja executável.

Você encontrará muito mais detalhes sobre isso no excelente artigo Como os programas são executados: binários ELF .

Stephen Kitt
fonte