web-dev-qa-db-ja.com

/lib64/ld-linux-x86-64.so.2とは何ですか、なぜファイルの実行に使用できるのですか?

最近、ファイルに実行権限がない場合、/lib64/ld-linux-x86-64.so.2を使用してそのファイルを実行できるというトリックを学びました。

たとえば、x権限を復元するには

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

私たちは走ることができます

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

どうすればいいのか分からない、それは通常のものではなく、一種の謎です。

19
Federal Reserve

それが動的リンカーです。単独で実行すると、何が行われるかがわかります。

使用法:ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]

共有ライブラリ実行可能ファイルのヘルパープログラムである「ld.so」を呼び出しました。このプログラムは通常ファイル/lib/ld.soにあり、ELF共有ライブラリを使用する実行可能ファイルの特別なディレクティブは、システムのプログラムローダーにヘルパープログラムをこのファイルからロードするように指示します。このヘルパープログラムは、プログラム実行可能ファイルに必要な共有ライブラリをロードし、実行するプログラムを準備して実行します。 ELF実行可能ファイルをロードして実行するために、このヘルパープログラムをコマンドラインから直接呼び出すことができます。これは、そのファイル自体を実行するようなものですが、実行する実行可能ファイルで指定されたヘルパープログラムファイルではなく、常に指定したファイルからこのヘルパープログラムを使用します。これは主に、メンテナーがこのヘルパープログラムの新しいバージョンをテストするのに役立ちます。このプログラムを実行する意図がなかった可能性があります。

リンカーは、動的にリンクされたプログラムを実行するために使用されます。 chmodを実行すると、カーネルは手動で行ったように/lib64/ld-linux-x86-64.so.2 chmodを効果的に実行します。後者は、chmodバイナリが実行可能でなくても機能します。

詳細については、優れた プログラムの実行方法:ELFバイナリ の記事を参照してください。

21
Stephen Kitt