0

x86 メモリ セグメンテーションについて読みましたが、何かが足りないと思います。リニア (仮想) アドレスは、GDT エントリ (ベース アドレス) から 32 ビットを取得し、オフセット アドレスから 32 ビットを取得して構築されます。それらを合計して 32 ビットの仮想アドレスを取得します。

今私が見ているように、32 オフセット ビットはすべての VA 空間にまたがることができるので、32 ビット ベース アドレスを使用する必要は実際にはありません。したがって、ベースアドレスは変換プロセスで実際には役割を果たさなかったと結論付けます.リング0特権でセグメントのVAを取得できるため、セグメンテーションを使用したメモリ保護(x86保護モード)は役に立たないという結論に達しましたオフセットアドレス自体と。(例: jump 0x08000001 - セグメントにリング 3 特権がある場合、カーネル VA へ)

では、すべてのメモリ保護はページングに基づいているのでしょうか?

4

2 に答える 2

0

32 ビット オフセットが VA 空間全体に及ぶ可能性があるという観察は正しいです。ただし、セグメント記述子には制限も含まれているため、そのセグメントを使用してその制限を超えてアクセスすると、#GP (一般保護違反) が発生します。また、リング 3 コードでリング 0 セグメントを使用することはできません。それはそもそもリングレベルの目的を無効にするでしょう.

于 2013-06-27T15:03:42.067 に答える
0

セグメント セレクタとセグメント ディスクリプタには、メモリ セグメントの境界に関するデータが含まれます。
境界だけでなく、アクセス タイプも記述子に含まれています。

0 ~ 3 の特権レベルで、少ないほど多くの特権があります。また、読み取り、書き込み、実行情報。したがって、セグメント内の異なる特権レベルごとに異なるアクセス権限があり、これはプロテクト モードの基本的なメカニズムの一部です。

従来のセグメンテーションは、各セグメント領域の重複を防ぐだけです。そうしないと、コード セグメントがアプリケーション (またはユーザー) のデータ セグメントまたはスタック セグメント メモリによって汚染されます。

最近のセグメンテーションには、セグメント セレクターとセグメント記述子によるより確実な保護方法が含まれています。

起動手順の後、システムはユーザー特権モード (3) に入ります。その後、ルートキットを使用するか、熟練したハッカー向けの別の方法がない限り、カーネル特権モード (0) にアクセスできません。:)

于 2014-01-16T11:04:38.423 に答える