リンカーとライブラリ

セグメントへのアクセス権

システムで読み込まれるプログラムには、少なくとも 1 つの読み込み可能セグメントが存在しなければなりません (ただし、このことはファイル形式では要求されていません)。システムは、読み込み可能セグメントのメモリーイメージを作成するとき、p_flags 構成要素で指定されるアクセス権を与えます。PF_MASKPROC マスクのすべてのビットは、プロセッサ固有の解釈方法に対して予約されます。

表 7-35 セグメントフラグビット、p_flags

名前 

値 

意味 

PF_X

0x1

実行 

PF_W

0x2

書き込み 

PF_R

0x4

読み取り 

PF_MASKPROC

0xf0000000

指定されていない 

アクセス権ビットが 0 の場合、その種類のアクセスは拒否されます。実際のメモリーアクセス権は、メモリー管理ユニット (システムによって異なることがある) に依存します。すべてのフラグ組み合わせが有効ですが、システムは要求以上のアクセスを与えることがあります。ただしどんな場合も、特に断りが明示的に記述されていない限り、セグメントは書き込み権を持ちません。次の表は、正確なフラグ解釈と許容されるフラグ解釈を示しています。

表 7-36 セグメントへのアクセス権

 

値 

正確なフラグ解釈 

許容されるフラグ解釈 

なし

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

読み取り、書き込み、実行 

読み取り、書き込み、実行 

たとえば、標準的なテキストセグメントは読み取り権と実行権を持っていますが、書き込み権は持っていません。データセグメントは通常、読み取り権、書き込み権、および実行権を持っています。