Linuxの共有ライブラリはなぜ実行可能ですか?


8

気になるだけです。

bash-3.00$  ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'

+ rだけですべてがうまくいくようです。/ usr / libの.soのほとんどに+ xが設定されていることに気づきました...

共有ライブラリに実行可能ビットが設定されているのはなぜですか?設定しないとどうなりますか?


2
ライブラリを正しく実行するために+ xは必要ありません。おそらくそれらはリンクなのでしょうか?リンクをたどるには+ xが必要です。
Chris S

はい、+ xは必要ありませんが、ほとんどのライブラリで設定されています。
Tomo

この質問は、UNIX&Linux上で頼まれました:unix.stackexchange.com/questions/40587/...(と正しい答えを得たが)
のMichałGórny

回答:


3

実際にはldd実装によって異なります。ldd通常はスクリプトですが、編集してどこでなぜエラーが発生するかを確認できます。

Ubuntu 10.04ではlddread権限のみをチェックします。ファイルがELF(実行可能およびリンク可能形式)ではない場合、動的実行可能ファイルではなくエラーが発生する可能性があります。ここのライブラリはすべてです。たとえば-rw-r--r--

$ find /usr/lib -type f -name "libm*.so*" -ls
(...)
-rw-r--r--   1 root     root       216800 Feb 26 22:20 /usr/lib/libmp.so.3.1.16
-rw-r--r--   1 root     root        76728 Mar 14 04:23 /usr/lib/libmjpegutils-1.9.so.0.0.0
-rw-r--r--   1 root     root       134464 Jan 29  2010 /usr/lib/libm17n-core.so.0.3.0
-rw-r--r--   1 root     root       290480 Feb 17  2010 /usr/lib/libmtp.so.8.3.2

x共有ライブラリへのアクセスを望んでも衝撃はありません。executableモードは、OSにアクセス権制御の別のレベルを与える規則です。実行可能ローダーは、アクセスを制御して、ユーザーが実行できるようにするだけでなく、エラーを防止します(一部のスクリプトまたはプログラムは、一部のユーザーが実行してはいけません)。

同じ理由でこれを共有ライブラリに拡張することもできますが、共有ライブラリを単独で実行することはできず、偶然に使用れるエラーが少なくなります)。したがって、必要性はそれほど明白ではありません(rアクセスで十分です)。


3

実際に多くのライブラリを実行できます。たとえば/lib/libc.so.6、最近のGNU / Linuxシステムでシェルで入力したときにどうなるかを確認してください。


0

-xを指定して実行可能ファイルを作成するように考えてください。実行できなくなります。これらのライブラリを、別のプログラム(myPrograとしましょう)によって呼び出される一般的な関数のコレクションと見なします。ライブラリ/関数を実行できない場合...何もありません

function1() {} 
function2() {} 
int main() { 
printf("Let's call func1"); 
function1(); 
printf("Let's call func2"); 
function2(); 
} 

ここで、function1とfunction2を別のファイルに配置してインクルードすると、ライブラリになります。(もちろん、もっと複雑なものです。これは単なる例です)

しかし、いずれにしても、ご覧のとおり、ライブラリに含まれているコードを実行する必要があります


ただし、ライブラリではなく実行可能ファイルを実行します。
Ignacio Vazquez-Abrams

上記の編集されたバージョンを参照してください
Nikolaidis Fotis

0

重要なのは、ファイル形式、実行可能およびリンク可能な形式です。実行可能ファイルと共有ライブラリの両方を識別するためにまったく同じファイル形式が使用されるため、どちらもOSローダーに対して適切な実行可能権限を持っている必要があります。これにより、単一のローダーと実行可能ファイルにシンボルテーブルが含まれている場合、DSOとして使用できます。


それで、ローダーはファイルヘッダーではなく許可ビットを使用して、ロードするものを識別しますか?
Tomo

ローダーはファイルヘッダーを使用して、コンテンツをDYNまたはEXECとして識別し、適切な処理を行います。実行ビットはローダーではなくOS用です。ELFは実行形式であり、実行ビットがないため、OSはローダーがヘッダーを読み取るためにファイルを実行することを許可しません。ELF en.wikipedia.org/wiki/Executable_and_Linkable_Formatの詳細については、ウィキペディアを確認してください。
nzwulfin 2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.