2017-05-30 28 views
-2

Windows 2012 r2サーバーで実行されている各プロセスに独自のヒープがある場合、1つのプロセスで別のプロセスのヒープを破損させることはできませんか?私は、すべてのヒープが "グローバル"アドレス空間に格納されている可能性があると思いますが、AVは、あるプロセスがそのアドレス空間外のメモリからの書き込みまたは読み込みを試みるときに起こります...そのため、プロセスのヒープ破壊アドレス空間を所有していたのですか?Windows 2012 r2サーバーでのヒープ破損の影響

+0

プロセスが誤って別のプロセスのメモリを壊すことはありません。これは[Windows NT](https://en.wikipedia.org/wiki/Windows_NT)ファミリのすべてのバージョンのWindowsに当てはまります。ほぼ25年間、今。 – IInspectable

答えて

2

あなたはvirtual memoryの仕組みを読む必要があります。すべてを網羅するアドレス空間はありません。

プロセスによって変化しない物理RAMアドレスと物理ディスクアドレスがあります。しかし、ユーザーモードコードはこれらを直接使用することはありません。

むしろ、メモリ管理ユニットは仮想アドレスから物理アドレスへのマッピングを提供します。ページテーブルはプロセス固有であるため、このマッピングは各プロセスに固有です。リング0(カーネルモード)コードのみがマッピングステップをバイパスできますが、これはハードウェアで実行されます。ユーザプロセスの場合、特定の物理アドレスにつながるマッピングがない場合、仮想アドレスを使用してその物理ロケーションに名前を付ける方法がないため、そのコンテキストからはアクセスできません。そして、ページテーブル自体につながるマッピングはありません。

これは、メモリ管理ユニットとその弟であるメモリ保護ユニットの違いです。メモリ保護ユニットを使用するアーキテクチャでは、単一のグローバルアドレッシングスキームがあり、ハードウェア強制パーミッションビットは特権コードによってしか変更できません。

あなたはおよそ

つのプロセスを尋ねたところは、[原文]アドレス空間

はただ存在していないのです外の[sic]またはメモリから読み出さから書き込もうとします。それは私の車の電話番号が何であるか尋ねるようなものです。私の車はVINとナンバープレートで識別されますが、どちらもあなたが電話システムを介して話すことを許可しません。

アクセス違反(セグメンテーションフォルトとも呼ばれることがあります)は、プロセスが自身のアドレス空間のマップされていない部分、またはアクセス試行をトラップするように明示的に設定されたページへの書き込み、読み込み、おそらく拡張、またはコピーオンライト)。プロセスによるすべてのメモリアクセスは、定義上、そのアドレス空間内で解釈されます。

関連する問題