セグメントへのアクセス権
システムで読み込まれるプログラムには、少なくとも 1 つの読み込み可能セグメントが存在しなければなりません (ただし、この制限はファイル形式による要件ではありません)。システムは、読み込み可能セグメントのメモリーイメージを作成するとき、p_flags メンバーで指定されるアクセス権を与えます。PF_MASKPROC マスクのすべてのビットは、プロセッサ固有のセマンティクスのために予約されます。
表 13-2 ELF セグメントフラグ | | |
PF_X
| 0x1
| 実行
|
PF_W
| 0x2
| 書き込み
|
PF_R
| 0x4
| 読み取り
|
PF_MASKPROC
| 0xf0000000
| 指定なし
|
|
アクセス権ビットが 0 の場合、そのビットのアクセスは拒否されます。実際のメモリーアクセス権は、メモリー管理ユニット (システムによって異なることがある) に依存します。すべてのフラグ組み合わせが有効ですが、システムは要求以上のアクセスを与えることがあります。ただしどんな場合も、特に断りが明示的に記述されていないかぎり、セグメントは書き込み権を持ちません。次の表に、正確なフラグ解釈と許容されるフラグ解釈を示します。
表 13-3 ELF セグメントへのアクセス権 | | | |
なし
| 0
| すべてのアクセスが拒否される
| すべてのアクセスが拒否される
|
PF_X
| 1
| 実行のみ
| 読み取り、実行
|
PF_W
| 2
| 書き込みのみ
| 読み取り、書き込み、実行
|
PF_W+PF_X
| 3
| 書き込み、実行
| 読み取り、書き込み、実行
|
PF_R
| 4
| 読み取りのみ
| 読み取り、実行
|
PF_R + PF_X
| 5
| 読み取り、実行
| 読み取り、実行
|
PF_R+PF_W
| 6
| 読み取り、書き込み
| 読み取り、書き込み、実行
|
PF_R + PF_W + PF_X
| 7
| 読み取り、書き込み、実行
| 読み取り、書き込み、実行
|
|
たとえば、標準的なテキストセグメントは読み取り権と実行権を持っていますが、書き込み権は持っていません。データセグメントは通常、読み取り権、書き込み権、および実行権を持っています。