3

予約されたメモリアドレスのリストはありますか?ユーザースペースプログラムのメモリを割り当てることができなかったアドレスのリストはありますか?これはおそらくOSごとまたはアーキテクチャごとであると思いますが、誰かがより一般的なOSとアーキテクチャのいくつかを知っていることを期待していました。私はいくつかのバージョンのウィンドウで1つしか掘り下げることができませんでした:

Windows NT、2k、およびXPの場合、次のようになります。

0x00000000-0x0000ffff->デバッグを簡素化するために最下位ページが保護されています

0x00001000-0x7ffeffff->アプリケーションのメモリ領域

0x7fff0000-0x7fffffff->メモリ機能が次の部分に損傷を与えないようにする保護領域

0x80000000-0xffffffff->ドライバなどを含むシステムが配置されているメモリ

Linux、またはBSD(またはその他のこと)について知っている人はいますか?

4

1 に答える 1

1

Linuxは通常、カーネルによって0xC000000から0xFFFFFFFFを所有するように構成されています。これは変更できます(たとえば、予約されていない悪名高い4GB〜4GBの分割)。glibcは通常0xB000000でロードされます。

Linuxでは、セキュリティsysctlによってブロックされない限り、特定のmmap()呼び出しによって0x00000000を要求できます(ブロックするのは悪い考えであることが判明しました)。

NULLの割り当てを保護する:

NULLは明示的に割り当て可能であるだけなので、それを実行したプログラムは、そうすることの結果に備えて準備されたと思います。-fno-delete-null-pointer-checks影響を受けるコードが機能するには、少なくともGCCに必要です。これは、ゼロページをマッピングした古いBSDの動作をエミュレートするためだと言われています。

于 2010-03-15T15:05:44.323 に答える