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

时间:2010-11-26 21:29:29

标签: c# memory

我希望我的程序从内存地址读取一个值,并根据地址的值做一些工作。我目前所做的方式是每隔50毫秒在一个定时器中执行该方法,在那里它读取地址并使用该值进行工作。有没有什么方法可以挂钩到地址而不需要定时器,或者只要它更新就至少读取地址?

4 个答案:

答案 0 :(得分:2)

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

您可以只订阅该事件,而不是轮询该值。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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