なぜ_/usr/lib/
_のほとんどすべての共有ライブラリに実行権限ビットが設定されているのですか?それらを実行するためのユースケースは見当たりません。いくつかのmain
関数をフックして、短い著作権とバージョンのメモを出力することもできますが、多くの場合、それも実行せず、実行時にsegfaultします。
それで、これをx
に設定する意味は何ですか?すべてのライブラリパッケージャーはそれを行う必要がありますか? _0644
_権限を持つ共有ライブラリをdlopen()
するとどうなりますか?
HP-UXでは、共有ライブラリはmmap()を使用してメモリにマッピングされ、システム内のすべてのメモリページには、カーネルおよびプロセッサハードウェアのメモリページ保護メカニズムと連動する保護ビットがあります。システム上のメモリの任意のページのコンテンツを実行するには、そのページにPROT_EXECが設定されている必要があります。これは、データ実行の悪用を防ぐのに役立つ機能です。
Mmap()呼び出しは、マップしようとしているファイルの許可ビットを使用して、それを含むマップされたメモリページの保護ビットを定義します。rwx-> PROT_READ | PROT_WRITE | PROT_EXEC(sys/mman.hから)。したがって、共有ライブラリをHP-UXで使用できるようにするには、共有ライブラリを含むファイルに実行権限が必要です。これにより、マップされたライブラリにも実行権限が付与されます。
HP-UXシステムでモード644の共有ライブラリを使用すると、コアダンプが発生します。
非実行可能共有オブジェクトは正常に動作しますが、実行可能とマークされたライブラリはまたはスタンドアロンプログラムとして実行可能です。
それで、この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/>.