私の同僚はいつも、何かを「パブリック」として宣言すると、どのプログラムもそのメモリにアクセスできるため危険であり、解決策は「プライベート」アクセス修飾子を使用することだと私に言います。
これが事実かどうか疑問に思っています。
私の同僚はいつも、何かを「パブリック」として宣言すると、どのプログラムもそのメモリにアクセスできるため危険であり、解決策は「プライベート」アクセス修飾子を使用することだと私に言います。
これが事実かどうか疑問に思っています。
実際、それは真実ではありません。
アクセス修飾子は、コードを整理するためにのみ存在します。猫の手の届かないところに置くことで、ガラスが倒れるのを防ぐという意味でのみ保護します。
public
アクセス修飾子は、private
同じアプリケーション内の他のクラスに対するそれらの構造(クラス、メソッド、または変数)の可視性にのみ関係します。プロセスとユーザー間のメモリ保護は、オペレーティングシステムによって実施されます。Windowsの場合、管理者以外のレベル(およびシステムリング)のプロセス/スレッドが、オープンアクセス許可で明示的に共有されていないメモリ(共有メモリなど)にアクセスできないようにします。実際、Windowsでは、プロセスがメモリの特定の領域に非常に特定の権限を付与することを許可していますが、これはC#の言語定義では提供されていません。システムAPIにアクセスして、特定のメモリブロックへのその種のアクセスの許可を制御する必要があります。デフォルトでは、メモリのすべてのブロックがOSによって保護されています。
これで、メモリスキャナーがring-0で実行されている場合、または特定の昇格された特権で実行されている場合、そのアクセスをブロックするためにプロセスで実行できることは何もありません。
C#修飾子は、メモリのアドレス指定可能性に影響を与えません。プロセッサとOSアーキテクチャがそれを制御します。