web-dev-qa-db-fra.com

Qu'est-ce que /lib64/ld-linux-x86-64.so.2 et pourquoi peut-il être utilisé pour exécuter un fichier?

Récemment, j'ai appris une astuce: si un fichier ne dispose pas d'autorisations exécutables, nous pouvons exécuter ce fichier en utilisant /lib64/ld-linux-x86-64.so.2.

Par exemple, pour restaurer l'autorisation x pour

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

on peut courir

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

Je ne sais vraiment pas comment faire, ce n'est pas un truc ordinaire, une sorte de mystère.

19
Federal Reserve

C'est l'éditeur de liens dynamique; si vous l'exécutez seul, il vous dira ce qu'il fait:

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

Vous avez appelé ‘ld.so’, le programme d'assistance pour les exécutables de bibliothèque partagée. Ce programme réside généralement dans le fichier /lib/ld.so, et des directives spéciales dans les fichiers exécutables utilisant les bibliothèques partagées ELF indiquent au chargeur de programme du système de charger le programme d'aide à partir de ce fichier. Ce programme d'aide charge les bibliothèques partagées nécessaires à l'exécutable du programme, prépare le programme à s'exécuter et l'exécute. Vous pouvez appeler ce programme d'aide directement à partir de la ligne de commande pour charger et exécuter un fichier exécutable ELF; cela revient à exécuter ce fichier lui-même, mais utilise toujours ce programme d'assistance à partir du fichier que vous avez spécifié, au lieu du fichier du programme d'assistance spécifié dans le fichier exécutable que vous exécutez. Ceci est principalement utile aux mainteneurs pour tester de nouvelles versions de ce programme d'aide; il est probable que vous n'aviez pas l'intention d'exécuter ce programme.

L'éditeur de liens est utilisé pour exécuter des programmes liés dynamiquement. Lorsque vous exécutez chmod, le noyau exécute effectivement /lib64/ld-linux-x86-64.so.2 chmod, comme vous l'avez fait manuellement; ce dernier fonctionne même si le binaire chmod n'est pas exécutable.

Vous trouverez beaucoup plus de détails à ce sujet dans l'excellent article Comment les programmes sont exécutés: binaires ELF .

21
Stephen Kitt