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

/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

これがどのように行われるのか本当にわかりません。一般的なことではなく、少し神秘的でもあります。

答え1

これは動的リンカーです。単独で実行すると、それが何をしているかを教えてくれます。

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

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

リンカは、動的にリンクされたプログラムを実行するために使用されます。を実行すると、カーネルは実際に手動で実行するのとchmod同じ操作を実行します。後者は、実行権限チェックが実行されるファイルへのシステムコールを介して実行されるため、バイナリが実行可能でなくても機能します。シェルコマンドラインでシェルに渡されるパスは、代わりに実行権限を確認し、リンカに引数としてのみ渡されるパスです。実行可能ファイルが不要な場合も同様です。/lib64/ld-linux-x86-64.so.2 /bin/chmodchmodexecve()/lib64/ld-linux-x86-64.so.2 /bin/chmodexecve()/lib64/ld-linux-x86-64.so.2/bin/chmod/bin/chmod/bin/sh ./some-script./some-script

これについての詳細は素晴らしい記事で見ることができます。プログラムの実行方法:ELFバイナリ記事。

関連情報