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


59

なぜほとんどすべての共有ライブラリに/usr/lib/実行許可ビットが設定されているのですか?それらを実行するためのユースケースは見当たりません。main短い著作権とバージョンノートを印刷するためになんらかの形式の関数を接続することもできますが、多くはそれを実行せず、実行時にセグメンテーション違反を起こします。

それで、これを設定する意味は何xですか?すべてのライブラリパッケージャーがそれを行う必要がありますか?権限dlopen()を持つ共有ライブラリを使用するとどうなり0644ますか?


3
どのOS上(Linuxの場合、どのディストリビューション)?Debianのスクイズで、唯一の実行可能な共有ライブラリ/libとは、/usr/liblibcのとlibpthreadのであり、実行時に両方が著作権表示を印刷します。
ジル「SO-悪であるのをやめる」

セグメンテーション違反の場合、おそらくマイナーなバグです。あなたがそれらに遭遇した場合、私はそれらを報告したいと思います。ディストリビューションとは何ですか?
ファヒームミタ

@Faheem:main()エントリポイントとしてシンボルを持たないことは小さなバグではなく、基本的な設計上の選択です。あなたは私のポイントを逃しました。
タデウシュA.カドウボウスキ

2
@Gilles:RedHatファミリのLinuxシステム(FedoraおよびCentos)およびSolarisで、755がデフォルトのアクセス許可の選択肢であると考えました。
タデウシュA.カドウボウスキ

この質問の前提は普遍的に真実ではありません。実際、上記のように、Debian Linuxの場合は間違っています。また、FreeBSDおよびOpenBSDではfalseです。
JdeBP

回答:


32

HP-UXでは、共有ライブラリはmmap()を使用してメモリにマップされ、システム内のすべてのメモリページには、カーネルお​​よびプロセッサハードウェアのメモリページ保護メカニズムと連動する保護ビットがあります。システム上のメモリページのコンテンツを実行するには、そのページにPROT_EXECが設定されている必要があります。これは、データ実行の悪用を防ぐ便利な機能です。

mmap()呼び出しは、マップしようとしているファイルの許可ビットを使用して、マップするメモリページの保護ビットを定義します。rwx-> PROT_READ | PROT_WRITE | PROT_EXEC(sys / mman.hから)。そのため、共有ライブラリをHP-UXで使用できるようにするには、共有ライブラリを含むファイルに実行権限が必要で、マップされたライブラリにも実行権限が必要です。

HP-UXシステムでモード644の共有ライブラリを使用すると、コアダンプが発生します。


おそらく他のUnix実装でもこの機能を使用します。
タデウシュA.カドウボウスキ

(「ヒューレット・パッカード社のUNIX」から)> HP-UXは、UNIX System Vのに基づいて、Unixオペレーティングシステムのヒューレット・パッカードエンタープライズ独自の実装です
デヴィッド天宇ウォン

別の例として、個別のdebuginfoパッケージでrpmパッケージを作成するには、共有ライブラリの実行権限が必要です。そうでない場合、find-debuginfo.shはそれらの処理をスキップします。
ドメンヴランカー

20

非実行可能な共有オブジェクトが正常に動作しますが、ライブラリは、実行が可能とマーク、スタンドアロンのプログラムとして実行可能であること。

それで、このxを設定するポイントは何ですか?

なし、バージョンやその他の情報を出力しない限り

すべてのライブラリパッケージャーがそれを行う必要がありますか?

番号

0644権限を持つ共有ライブラリをdlopen()するとどうなりますか?

新しい共有オブジェクトハンドルを取得します(ファイルが読み取り可能な限りなど)... execビットはこれに影響しません


スタンドアロンの実行可能ファイルとして使用できないライブラリにまだexecビットが設定されている理由については、これはおそらく使用されているビルドシステムまたはリンクスクリプトのアーティファクトです。


参考のための出力例:

$ /lib/i386-linux-gnu/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10) stable release version 2.15, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.6.3.
Compiled on a Linux 3.2.14 system on 2012-04-19.
Available extensions:
    crypt add-on version 2.1 by Michael Glad and others
    GNU Libidn by Simon Josefsson
    Native POSIX Threads Library by Ulrich Drepper et al
    BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.

11
ほとんどの.soライブラリは、通常のmain()エントリポイントに似たものがないため、単にセグメンテーション違反です。Libcは外れ値です。開発者は、追加の機能としてこのメ​​モを作成しました。chmod a+x他のどのライブラリでも簡単にこの機能が提供されることはありません ` +xすべてのライブラリの設定のポイントはまだわかりません。
タデウシュA.カドウボウフスキ

同意し、おそらく.so実行可能なもののみをそのようにマークする必要があります。execビットが設定されたものはすべてスタンドアロンの実行可能ファイルであるということを意味しないように、答えを修正します。
役に立たない

5
「ldd」コマンドは通常、動的リンカー、ld-linux-x86-64.so.2、または/lib/ld-linux.so.2などを呼び出すshスクリプトです。動的リンカーは常に共有オブジェクトです。
ブルースエディガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.