C# 是否可以实时读取内存值?

C# 是否可以实时读取内存值?,c#,memory,C#,Memory,我希望让我的程序从内存地址读取一个值,并根据该地址的值执行一些工作。我目前的做法是每隔50毫秒在计时器中执行一次方法,在计时器中读取地址并使用值执行操作。有没有什么方法可以挂接地址而不需要计时器,或者至少在地址更新时读取地址?当然有,您可以使用observer模式。 一旦值发生变化,观察者将执行一些工作。当然有,您可以使用观察者模式。 一旦值发生变化,观察者将执行一些工作。这取决于数据写入内存地址的方式。如果这是您的程序写入的数据,您可以轻松地用方法或属性包装对该内存的访问(无论如何这是一个好主

我希望让我的程序从内存地址读取一个值,并根据该地址的值执行一些工作。我目前的做法是每隔50毫秒在计时器中执行一次方法,在计时器中读取地址并使用值执行操作。有没有什么方法可以挂接地址而不需要计时器,或者至少在地址更新时读取地址?

当然有,您可以使用observer模式。
一旦值发生变化,观察者将执行一些工作。

当然有,您可以使用观察者模式。
一旦值发生变化,观察者将执行一些工作。

这取决于数据写入内存地址的方式。如果这是您的程序写入的数据,您可以轻松地用方法或属性包装对该内存的访问(无论如何这是一个好主意),并在其更改时引发事件


不必轮询值,您只需订阅事件。

这取决于数据写入内存地址的方式。如果这是您的程序写入的数据,您可以轻松地用方法或属性包装对该内存的访问(无论如何这是一个好主意),并在其更改时引发事件


而不是轮询值,然后您可以订阅事件。

操作系统可能有调试器挂钩,您可以在其中立即捕获对感兴趣的变量所在的虚拟内存页的任何写入。

操作系统可能有调试器挂钩,您可以在其中立即捕获对感兴趣的变量所在的虚拟内存页的任何写入驻留。

旧的拉/推问题(基于相同概念的中断)。当Firefox写入其虚拟内存时,您需要操作系统级API挂钩。这种技术被用于游戏作弊
NtWriteVirtualMemory
是挂接的好选择,因为您不需要全局挂接(只需观看Firefox)。通常,全局内存写入挂钩用于检测DLL注入(对内存修补的弱防御)。您可以找到一篇关于API挂钩的文章。

旧的拉/推问题(基于相同概念的中断)。当Firefox写入其虚拟内存时,您需要操作系统级API挂钩。这种技术被用于游戏作弊
NtWriteVirtualMemory
是挂接的好选择,因为您不需要全局挂接(只需观看Firefox)。通常,全局内存写入挂钩用于检测DLL注入(对内存修补的弱防御)。你可以找到一篇关于API挂钩的文章。

在C#中,事件基本上只是观察者模式的语言集成版本。我建议您使用内置的语言功能,而不是使用您自己设计的经典“观察者”。好吧,我对c不太熟悉,但根据整个应用程序的目标,如果只是一个玩具项目,手动实现它可能会很有趣。在c中,事件基本上只是观察者模式的语言集成版本。我建议您使用内置的语言功能,而不是使用您自己设计的经典“观察者”。好吧,我不太熟悉c#,但取决于整个应用程序的目标,如果只是一个玩具项目,手工实现它可能会很有趣。如果是我的程序不写的内存呢?如果是我的程序不写的内存呢?它是一个属性,还是纯粹的内存?(可能是用本机代码编写的)。如果有一个setter,你可以调用setter中的一个事件,它只是纯内存。它是Firefox用于插件的插件容器中的一个值。它是属性还是纯内存?(可能是用本机代码编写的)。如果有一个setter,你可以调用setter中的一个事件,它只是纯内存。这是Firefox用于插件的插件容器中的值。