在C#中声明一个variables为“private”是否可以保护窗口中的内存不被内存扫描器访问?

我的同事总是告诉我,如果我们声明任何东西都是“公开的”,那么这是危险的,因为任何程序都可以访问这个内存,而解决scheme是使用“私有”访问修饰符。

我想知道这是否是事实真相。

事实并非如此。

访问修饰符仅用于帮助组织代码。 他们只是保护它,因为你可以保护你的玻璃杯,使它不会被猫撞到。

publicprivate访问修饰符只与这些结构(类,方法或变量)对同一应用程序中的其他类的可见性有关。 进程和用户之间的内存保护由操作系统执行。 在Windows的情况下,它确实确保非管理员级(和系统环)进程/线程不具有访问具有开放权限的未明确共享的存储器(例如共享存储器)。 实际上,Windows允许进程向特定的内存区域授予非常特定的权限,但是C#的语言定义中没有提供这些权限。 您需要访问系统API来控制对特定内存块的访问权限; 默认情况下,所有内存块都受OS的保护。

现在,如果内存扫描器运行在ring-0或具有特定的提升权限,则在进程中没有任何事情可以阻止访问。

C#修饰符对内存可寻址性没有影响 – 处理器和操作系统体系结构控制着这一点。